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
- VerificationAttribute.cs
- TextDecorationCollectionConverter.cs
- Transform.cs
- LoadRetryHandler.cs
- HttpListenerRequest.cs
- CompositeDesignerAccessibleObject.cs
- TextStore.cs
- StringToken.cs
- SystemSounds.cs
- FamilyCollection.cs
- ICollection.cs
- PackageProperties.cs
- LayoutEngine.cs
- WebPart.cs
- SiteMapDataSourceView.cs
- HTTPNotFoundHandler.cs
- ObjectToModelValueConverter.cs
- SendingRequestEventArgs.cs
- TcpHostedTransportConfiguration.cs
- DateTimeUtil.cs
- HandleTable.cs
- SocketPermission.cs
- BindingCollection.cs
- ColorKeyFrameCollection.cs
- ExpandedWrapper.cs
- Part.cs
- BoolExpr.cs
- ExitEventArgs.cs
- FrameworkElement.cs
- Avt.cs
- SelectionHighlightInfo.cs
- _HeaderInfoTable.cs
- ScrollEventArgs.cs
- webbrowsersite.cs
- Terminate.cs
- BaseDataBoundControl.cs
- propertytag.cs
- OutKeywords.cs
- ExpressionParser.cs
- VisualStateGroup.cs
- WmpBitmapDecoder.cs
- BaseInfoTable.cs
- ClientUtils.cs
- SQLMembershipProvider.cs
- SchemaLookupTable.cs
- HttpCookieCollection.cs
- BooleanFunctions.cs
- ButtonColumn.cs
- HostingEnvironmentWrapper.cs
- ArrayListCollectionBase.cs
- ZipIOExtraField.cs
- ToolBarPanel.cs
- EditBehavior.cs
- NullToBooleanConverter.cs
- JsonReader.cs
- ConditionChanges.cs
- ComponentEditorForm.cs
- SwitchElementsCollection.cs
- CryptographicAttribute.cs
- TextTreeTextBlock.cs
- RadioButtonAutomationPeer.cs
- UInt16Storage.cs
- WindowsListViewScroll.cs
- ObjectListDataBindEventArgs.cs
- ListViewHitTestInfo.cs
- RSAPKCS1KeyExchangeFormatter.cs
- ResourcePermissionBase.cs
- ChildDocumentBlock.cs
- TextSerializer.cs
- SqlCacheDependencyDatabase.cs
- DataControlButton.cs
- MimePart.cs
- ConstantSlot.cs
- TlsnegoTokenAuthenticator.cs
- EdmFunctions.cs
- FusionWrap.cs
- CurrencyManager.cs
- BamlRecords.cs
- EventOpcode.cs
- DrawingAttributesDefaultValueFactory.cs
- RectangleGeometry.cs
- Manipulation.cs
- RolePrincipal.cs
- SqlInternalConnectionTds.cs
- IODescriptionAttribute.cs
- ConfigurationElementProperty.cs
- AlignmentYValidation.cs
- MeasureItemEvent.cs
- DataGridViewCellValidatingEventArgs.cs
- XmlAttributeHolder.cs
- DbParameterHelper.cs
- XmlWrappingReader.cs
- TreeNodeStyleCollection.cs
- SystemEvents.cs
- ContentElement.cs
- WebBrowserContainer.cs
- TextEndOfParagraph.cs
- PasswordRecovery.cs
- RoleService.cs
- DataSourceCache.cs