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
- StylusPlugin.cs
- EditorPartChrome.cs
- TrackingProfileManager.cs
- DrawingVisual.cs
- RenamedEventArgs.cs
- TableCell.cs
- PagerSettings.cs
- EventLogPermissionAttribute.cs
- ObjectDataSourceSelectingEventArgs.cs
- Interlocked.cs
- DateTimeOffsetConverter.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- DataGridViewCellValidatingEventArgs.cs
- JsonWriterDelegator.cs
- ViewEventArgs.cs
- MatchingStyle.cs
- SortFieldComparer.cs
- QuaternionAnimationBase.cs
- Scene3D.cs
- XmlAttributeOverrides.cs
- Transform3DCollection.cs
- RelationshipConstraintValidator.cs
- SafeNativeMethods.cs
- ButtonFlatAdapter.cs
- WebPartsPersonalizationAuthorization.cs
- ItemMap.cs
- WmlTextBoxAdapter.cs
- SamlAssertionKeyIdentifierClause.cs
- MenuItemStyleCollection.cs
- Monitor.cs
- ConnectionManagementElementCollection.cs
- TableLayoutStyleCollection.cs
- OleDbParameterCollection.cs
- _Connection.cs
- X509Certificate2.cs
- WebUtility.cs
- StoragePropertyMapping.cs
- WebControl.cs
- CallContext.cs
- CellTreeNodeVisitors.cs
- DashStyle.cs
- Point3DAnimation.cs
- compensatingcollection.cs
- CapabilitiesRule.cs
- _Rfc2616CacheValidators.cs
- ExtenderHelpers.cs
- FontConverter.cs
- COMException.cs
- ExtensionSimplifierMarkupObject.cs
- MenuItemBindingCollection.cs
- UnionCodeGroup.cs
- NegatedConstant.cs
- WindowsSidIdentity.cs
- GeneralTransform2DTo3DTo2D.cs
- UpdateExpressionVisitor.cs
- Misc.cs
- SchemaDeclBase.cs
- TextControlDesigner.cs
- ComboBoxItem.cs
- HtmlInputText.cs
- DbParameterCollectionHelper.cs
- WindowsAuthenticationModule.cs
- XmlEventCache.cs
- CodeChecksumPragma.cs
- Roles.cs
- ToolStripItemEventArgs.cs
- ParallelSeparator.xaml.cs
- FailedToStartupUIException.cs
- TextWriterTraceListener.cs
- TraceData.cs
- SelectedDatesCollection.cs
- BypassElement.cs
- QueryableDataSource.cs
- PropagationProtocolsTracing.cs
- EntityContainer.cs
- CommonXSendMessage.cs
- LocalizableResourceBuilder.cs
- SiteMapDataSourceView.cs
- RemoteX509AsymmetricSecurityKey.cs
- XXXInfos.cs
- BuilderInfo.cs
- RoutedUICommand.cs
- VisualStyleInformation.cs
- FontDifferentiator.cs
- MonitoringDescriptionAttribute.cs
- MonikerUtility.cs
- ColorConverter.cs
- SafeRegistryHandle.cs
- GridViewColumnCollectionChangedEventArgs.cs
- FixedDocumentPaginator.cs
- Block.cs
- HandlerFactoryWrapper.cs
- SwitchElementsCollection.cs
- QilIterator.cs
- ImageCollectionCodeDomSerializer.cs
- WindowsScroll.cs
- TabItem.cs
- SqlDataSourceSelectingEventArgs.cs
- DiscoveryReference.cs
- ProcessInfo.cs