Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / EntityContainerAssociationSetEnd.cs / 1305376 / EntityContainerAssociationSetEnd.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.Metadata.Edm; namespace System.Data.EntityModel.SchemaObjectModel { ////// Represents an element. /// internal sealed class EntityContainerAssociationSetEnd : EntityContainerRelationshipSetEnd { private string _unresolvedRelationshipEndRole; ////// Constructs an EntityContainerAssociationSetEnd /// /// Reference to the schema element. public EntityContainerAssociationSetEnd( EntityContainerAssociationSet parentElement ) : base( parentElement ) { } public string Role { get { return _unresolvedRelationshipEndRole; } set { _unresolvedRelationshipEndRole = value; } } public override string Name { get { return Role; } } protected override bool HandleAttribute(XmlReader reader) { if (base.HandleAttribute(reader)) { return true; } else if (CanHandleAttribute(reader, XmlConstants.Role)) { HandleRoleAttribute(reader); return true; } return false; } ////// This is the method that is called when an Role Attribute is encountered. /// /// The XmlRead positned at the extent attribute. private void HandleRoleAttribute( XmlReader reader ) { _unresolvedRelationshipEndRole = HandleUndottedNameAttribute( reader, _unresolvedRelationshipEndRole ); } ////// Used during the resolve phase to resolve the type name to the object that represents that type /// internal override void ResolveTopLevelNames() { base.ResolveTopLevelNames(); // resolve end name to the corosponding relationship end IRelationship relationship = ParentElement.Relationship; if ( relationship == null ) { // error already logged for this return; } } internal override void ResolveSecondLevelNames() { base.ResolveSecondLevelNames(); if (_unresolvedRelationshipEndRole == null && EntitySet != null) { // no role provided, infer it RelationshipEnd = InferRelationshipEnd(EntitySet); if (RelationshipEnd != null) { _unresolvedRelationshipEndRole = RelationshipEnd.Name; } } else if (_unresolvedRelationshipEndRole != null) { IRelationship relationship = ParentElement.Relationship; IRelationshipEnd end; if (relationship.TryGetEnd(_unresolvedRelationshipEndRole, out end)) { RelationshipEnd = end; } else { // couldn't find a matching relationship end for this RelationshipSet end AddError(ErrorCode.InvalidContainerTypeForEnd, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InvalidEntityEndName(Role, relationship.FQName)); } } } ////// If the role name is missing but an entity set is given, figure out what the /// relationship end should be /// /// The given EntitySet ///The appropriate relationship end private IRelationshipEnd InferRelationshipEnd( EntityContainerEntitySet set ) { Debug.Assert(set != null, "set parameter is null"); if ( ParentElement.Relationship == null ) { return null; } ListpossibleEnds = new List (); foreach ( IRelationshipEnd end in ParentElement.Relationship.Ends ) { if ( set.EntityType.IsOfType( end.Type ) ) { possibleEnds.Add( end ); } } if ( possibleEnds.Count == 1 ) { return possibleEnds[0]; } else if ( possibleEnds.Count == 0 ) { // no matchs AddError( ErrorCode.FailedInference, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InferRelationshipEndFailedNoEntitySetMatch( set.FQName, this.ParentElement.FQName, ParentElement.Relationship.FQName, set.EntityType.FQName, this.ParentElement.ParentElement.FQName ) ); } else { // ambiguous AddError( ErrorCode.FailedInference, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InferRelationshipEndAmbiguous( set.FQName, this.ParentElement.FQName, ParentElement.Relationship.FQName, set.EntityType.FQName, this.ParentElement.ParentElement.FQName)); } return null; } internal override SchemaElement Clone(SchemaElement parentElement) { EntityContainerAssociationSetEnd setEnd = new EntityContainerAssociationSetEnd((EntityContainerAssociationSet)parentElement); setEnd._unresolvedRelationshipEndRole = _unresolvedRelationshipEndRole; setEnd.EntitySet = this.EntitySet; return setEnd; } } } // 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
- ComPlusServiceHost.cs
- LayoutDump.cs
- StylusPointDescription.cs
- XmlQueryCardinality.cs
- BitmapCodecInfoInternal.cs
- ParameterCollection.cs
- Peer.cs
- DropShadowEffect.cs
- InputScopeConverter.cs
- ToolboxItemFilterAttribute.cs
- MulticastDelegate.cs
- BooleanSwitch.cs
- LambdaExpression.cs
- ConfigurationStrings.cs
- HttpListenerRequest.cs
- PolyBezierSegmentFigureLogic.cs
- LinqMaximalSubtreeNominator.cs
- DrawingGroupDrawingContext.cs
- InvalidComObjectException.cs
- SubpageParaClient.cs
- DynamicRendererThreadManager.cs
- RectAnimationUsingKeyFrames.cs
- UserInitiatedNavigationPermission.cs
- ScrollContentPresenter.cs
- _LazyAsyncResult.cs
- KerberosSecurityTokenAuthenticator.cs
- HtmlShim.cs
- TextDecorationCollectionConverter.cs
- RegexReplacement.cs
- Mappings.cs
- WS2007HttpBindingElement.cs
- XmlRawWriterWrapper.cs
- OleStrCAMarshaler.cs
- ActivityCodeDomSerializer.cs
- SoapSchemaImporter.cs
- SessionChannels.cs
- WindowsAuthenticationEventArgs.cs
- Application.cs
- ModelUIElement3D.cs
- PersianCalendar.cs
- ContextQuery.cs
- KnownTypesHelper.cs
- FixedTextContainer.cs
- LocalizationParserHooks.cs
- ValidationVisibilityAttribute.cs
- EdmToObjectNamespaceMap.cs
- XmlRootAttribute.cs
- Executor.cs
- ListSortDescription.cs
- ByteStreamMessageUtility.cs
- XmlSchemaGroup.cs
- SqlEnums.cs
- FormDesigner.cs
- BlurBitmapEffect.cs
- PointHitTestResult.cs
- TextDpi.cs
- SchemaImporter.cs
- ContainerControlDesigner.cs
- TextElementEnumerator.cs
- SiblingIterators.cs
- TransactionBehavior.cs
- FontInfo.cs
- IsolatedStoragePermission.cs
- FontInfo.cs
- ICollection.cs
- RangeEnumerable.cs
- EventProxy.cs
- If.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- GridViewSortEventArgs.cs
- SqlCacheDependencyDatabase.cs
- HtmlInputButton.cs
- NetworkInterface.cs
- BinaryKeyIdentifierClause.cs
- DirectoryLocalQuery.cs
- OleDbFactory.cs
- QilDataSource.cs
- TableCell.cs
- XmlSchemaDocumentation.cs
- RoutedEventValueSerializer.cs
- BitmapEffectDrawingContextState.cs
- XamlParser.cs
- ByteAnimationBase.cs
- GradientSpreadMethodValidation.cs
- DbConnectionPoolOptions.cs
- ComponentGuaranteesAttribute.cs
- ForEachAction.cs
- AmbiguousMatchException.cs
- JsonReader.cs
- ScriptManagerProxy.cs
- ClipboardData.cs
- ListBoxItemAutomationPeer.cs
- CharacterBuffer.cs
- SurrogateDataContract.cs
- TextViewBase.cs
- FileUpload.cs
- NamespaceList.cs
- safex509handles.cs
- ProxyElement.cs
- DataGridColumn.cs