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
- SafeSecurityHelper.cs
- EnumType.cs
- EventNotify.cs
- relpropertyhelper.cs
- SqlNodeTypeOperators.cs
- Latin1Encoding.cs
- SchemaExporter.cs
- XmlSchemaCompilationSettings.cs
- Image.cs
- Classification.cs
- UnknownWrapper.cs
- PersonalizationStateInfoCollection.cs
- SelectionEditingBehavior.cs
- adornercollection.cs
- TypeUsageBuilder.cs
- XmlSchemaAll.cs
- FreezableOperations.cs
- Package.cs
- LinqDataSourceStatusEventArgs.cs
- ExceptionHelpers.cs
- ViewSimplifier.cs
- Rectangle.cs
- WebZoneDesigner.cs
- X509Certificate2.cs
- DrawingGroupDrawingContext.cs
- ExpressionVisitor.cs
- RectangleGeometry.cs
- InternalConfigHost.cs
- PropertyExpression.cs
- HttpStreamMessage.cs
- StylusPlugInCollection.cs
- AuthorizationSection.cs
- OperationCanceledException.cs
- MsmqIntegrationBindingElement.cs
- Intellisense.cs
- ReadOnlyDictionary.cs
- EncryptedType.cs
- DataGridCellsPresenter.cs
- SqlConnectionPoolProviderInfo.cs
- TrackingExtract.cs
- BitmapEffectInputConnector.cs
- CurrentTimeZone.cs
- PublishLicense.cs
- WindowsStatusBar.cs
- SqlFlattener.cs
- ExternalException.cs
- WindowsEditBox.cs
- ContextMenu.cs
- WindowsHyperlink.cs
- FrameworkElementFactory.cs
- ExpressionConverter.cs
- ResXResourceSet.cs
- RotateTransform.cs
- DbException.cs
- CheckBoxFlatAdapter.cs
- DelayedRegex.cs
- SR.Designer.cs
- sqlser.cs
- EntityDataSourceWrapperCollection.cs
- AssemblyCache.cs
- InternalRelationshipCollection.cs
- ListViewItem.cs
- OracleConnectionString.cs
- FormViewModeEventArgs.cs
- CallContext.cs
- TrustLevelCollection.cs
- PopupControlService.cs
- Classification.cs
- ListBoxItem.cs
- TextTreeTextElementNode.cs
- basecomparevalidator.cs
- TypeElementCollection.cs
- RetrieveVirtualItemEventArgs.cs
- X509ChainPolicy.cs
- PerfCounters.cs
- ManualResetEvent.cs
- Track.cs
- DbConnectionPoolCounters.cs
- WebControlAdapter.cs
- AppSettingsReader.cs
- KeyInfo.cs
- DesignSurfaceManager.cs
- Storyboard.cs
- DesignerView.xaml.cs
- StringKeyFrameCollection.cs
- RegionInfo.cs
- ControlIdConverter.cs
- CssClassPropertyAttribute.cs
- SmtpNtlmAuthenticationModule.cs
- DataSourceView.cs
- HttpDebugHandler.cs
- ProfileSettingsCollection.cs
- OleDbMetaDataFactory.cs
- EditorAttribute.cs
- DataPagerFieldItem.cs
- SqlComparer.cs
- MethodSet.cs
- AnnotationStore.cs
- codemethodreferenceexpression.cs
- DesignerDataStoredProcedure.cs