Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / EntityContainerAssociationSet.cs / 1305376 / EntityContainerAssociationSet.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; using System.Xml; using System.Data; using System.Data.Objects.DataClasses; using System.Data.Metadata.Edm; using System.Globalization; namespace System.Data.EntityModel.SchemaObjectModel { ////// Represents an AssociationSet element. /// internal sealed class EntityContainerAssociationSet : EntityContainerRelationshipSet { // Note: If you add more fields, please make sure you handle that in the clone method private Dictionary_relationshipEnds = new Dictionary (); private List _rolelessEnds = new List (); /// /// Constructs an EntityContainerAssociationSet /// /// Reference to the schema element. public EntityContainerAssociationSet( EntityContainer parentElement ) : base( parentElement ) { } ////// The ends defined and infered for this AssociationSet /// internal override IEnumerableEnds { get { foreach ( EntityContainerAssociationSetEnd end in _relationshipEnds.Values ) { yield return end; } foreach ( EntityContainerAssociationSetEnd end in _rolelessEnds ) { yield return end; } } } protected override bool HandleAttribute(XmlReader reader) { if (base.HandleAttribute(reader)) { return true; } else if (CanHandleAttribute(reader, XmlConstants.Association)) { HandleRelationshipTypeNameAttribute(reader); return true; } return false; } protected override bool HandleElement(XmlReader reader) { if (base.HandleElement(reader)) { return true; } else if (CanHandleElement(reader, XmlConstants.End)) { HandleEndElement(reader); return true; } return false; } /// /// The method that is called when an End element is encountered. /// /// The XmlReader positioned at the EndElement. private void HandleEndElement( XmlReader reader ) { Debug.Assert( reader != null ); EntityContainerAssociationSetEnd end = new EntityContainerAssociationSetEnd( this ); end.Parse( reader ); if ( end.Role == null ) { // we will resolve the role name later and put it in the // normal _relationshipEnds dictionary _rolelessEnds.Add( end ); return; } if ( HasEnd( end.Role ) ) { end.AddError( ErrorCode.InvalidName, EdmSchemaErrorSeverity.Error, reader, System.Data.Entity.Strings.DuplicateEndName(end.Name ) ); return; } _relationshipEnds.Add( end.Role, end ); } internal override void ResolveTopLevelNames() { base.ResolveTopLevelNames(); // this just got resolved Debug.Assert( Relationship == null || Relationship.RelationshipKind == RelationshipKind.Association, string.Format("The relationship referenced by the Association attribute of {0} is not an Association relationship.", FQName)); } internal override void ResolveSecondLevelNames() { base.ResolveSecondLevelNames(); // the base class should have fixed up the role names on my ends foreach (EntityContainerAssociationSetEnd end in _rolelessEnds) { if (end.Role != null) { if (HasEnd(end.Role)) { end.AddError(ErrorCode.InvalidName, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InferRelationshipEndGivesAlreadyDefinedEnd(end.EntitySet.FQName, Name)); } else { _relationshipEnds.Add(end.Role, end); } } // any that didn't get resolved will already have errors entered } _rolelessEnds.Clear(); } ////// Create and add a EntityContainerEnd from the IRelationshipEnd provided /// /// The relationship end of the end to add. /// The entitySet to associate with the relationship end. protected override void AddEnd( IRelationshipEnd relationshipEnd, EntityContainerEntitySet entitySet ) { Debug.Assert( relationshipEnd != null ); Debug.Assert( !_relationshipEnds.ContainsKey( relationshipEnd.Name ) ); // we expect set to be null sometimes EntityContainerAssociationSetEnd end = new EntityContainerAssociationSetEnd( this ); end.Role = relationshipEnd.Name; end.RelationshipEnd = relationshipEnd; end.EntitySet = entitySet; if ( end.EntitySet != null ) { _relationshipEnds.Add( end.Role, end ); } } protected override bool HasEnd( string role ) { return _relationshipEnds.ContainsKey( role ); } internal override SchemaElement Clone(SchemaElement parentElement) { EntityContainerAssociationSet associationSet = new EntityContainerAssociationSet((EntityContainer)parentElement); associationSet.Name = this.Name; associationSet.Relationship = this.Relationship; foreach (EntityContainerAssociationSetEnd end in this.Ends) { EntityContainerAssociationSetEnd clonedEnd = (EntityContainerAssociationSetEnd)end.Clone(associationSet); associationSet._relationshipEnds.Add(clonedEnd.Role, clonedEnd); } return associationSet; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EtwTrace.cs
- VersionPair.cs
- AutomationTextAttribute.cs
- ColorAnimationBase.cs
- DataGridViewAdvancedBorderStyle.cs
- SafeEventHandle.cs
- WindowsListViewGroupSubsetLink.cs
- Button.cs
- OleDbTransaction.cs
- PathGeometry.cs
- FixedTextPointer.cs
- SHA1Managed.cs
- regiisutil.cs
- ImageEditor.cs
- SqlXml.cs
- TextServicesDisplayAttribute.cs
- ByteFacetDescriptionElement.cs
- SqlBooleanizer.cs
- CachedBitmap.cs
- EmissiveMaterial.cs
- Inline.cs
- basenumberconverter.cs
- XmlRootAttribute.cs
- HierarchicalDataSourceDesigner.cs
- NullableIntMinMaxAggregationOperator.cs
- BamlCollectionHolder.cs
- SocketElement.cs
- IChannel.cs
- Debug.cs
- ContentPlaceHolder.cs
- DataRowExtensions.cs
- MarkupWriter.cs
- ReflectPropertyDescriptor.cs
- WebPartConnectionCollection.cs
- DataGridViewImageCell.cs
- KnownIds.cs
- brushes.cs
- CodeTypeOfExpression.cs
- DbBuffer.cs
- DeclarativeCatalogPart.cs
- TextBlockAutomationPeer.cs
- DataSet.cs
- TraceLevelHelper.cs
- CacheChildrenQuery.cs
- XmlMemberMapping.cs
- TimeZoneInfo.cs
- FileCodeGroup.cs
- ManagementDateTime.cs
- BaseTreeIterator.cs
- PieceDirectory.cs
- XmlSchemaSet.cs
- CaseStatement.cs
- DynamicUpdateCommand.cs
- AssertSection.cs
- XmlSchemaChoice.cs
- FlowPosition.cs
- CoreSwitches.cs
- HttpApplicationStateWrapper.cs
- RelationshipConverter.cs
- DataGridItemCollection.cs
- Keywords.cs
- PageWrapper.cs
- OleDbParameter.cs
- PassportAuthenticationModule.cs
- ProcessThread.cs
- IsolatedStoragePermission.cs
- ButtonStandardAdapter.cs
- Substitution.cs
- VariableQuery.cs
- CardSpacePolicyElement.cs
- RadioButtonBaseAdapter.cs
- IdnMapping.cs
- DataGridSortCommandEventArgs.cs
- JavaScriptString.cs
- PropVariant.cs
- AxParameterData.cs
- RoutingChannelExtension.cs
- LabelDesigner.cs
- StatusBarPanel.cs
- FragmentNavigationEventArgs.cs
- XmlSchemaAll.cs
- HitTestFilterBehavior.cs
- GroupDescription.cs
- HMACSHA256.cs
- RuntimeCompatibilityAttribute.cs
- XmlWellformedWriter.cs
- SqlTriggerContext.cs
- SizeChangedInfo.cs
- UpdateProgress.cs
- NumberFunctions.cs
- MetafileHeader.cs
- HttpApplication.cs
- HtmlElementCollection.cs
- CollectionChangedEventManager.cs
- SchemaNamespaceManager.cs
- MsdtcWrapper.cs
- IsolatedStorageException.cs
- StsCommunicationException.cs
- ComponentEditorForm.cs
- XmlAttributeProperties.cs