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
- GetImportFileNameRequest.cs
- ReturnEventArgs.cs
- HtmlControlPersistable.cs
- ObjectKeyFrameCollection.cs
- ConnectionPoolManager.cs
- SizeLimitedCache.cs
- PageTheme.cs
- FileUpload.cs
- TreeSet.cs
- ListControlBuilder.cs
- DbConnectionHelper.cs
- dbdatarecord.cs
- NavigateUrlConverter.cs
- Utility.cs
- JsonEnumDataContract.cs
- BaseTemplateBuildProvider.cs
- WorkflowIdleElement.cs
- ScrollChrome.cs
- CompoundFileReference.cs
- SqlDependencyUtils.cs
- MergeFailedEvent.cs
- DbConnectionOptions.cs
- ProtectedConfigurationSection.cs
- CommonRemoteMemoryBlock.cs
- MetricEntry.cs
- SourceElementsCollection.cs
- ByteAnimationBase.cs
- ImageField.cs
- NetNamedPipeBindingElement.cs
- DeclarativeConditionsCollection.cs
- RoleExceptions.cs
- DocumentPage.cs
- CustomAttributeBuilder.cs
- CqlParserHelpers.cs
- ManipulationPivot.cs
- ToolStripStatusLabel.cs
- autovalidator.cs
- MulticastOption.cs
- autovalidator.cs
- DataTableMappingCollection.cs
- sqlser.cs
- TextTreePropertyUndoUnit.cs
- tabpagecollectioneditor.cs
- RequestSecurityTokenResponseCollection.cs
- EventListener.cs
- Profiler.cs
- TextTreeTextElementNode.cs
- XmlSchemaAll.cs
- FunctionMappingTranslator.cs
- FormViewDeleteEventArgs.cs
- DecimalConstantAttribute.cs
- TextTreeText.cs
- CommonGetThemePartSize.cs
- DBConnection.cs
- SystemIPInterfaceProperties.cs
- PropertySegmentSerializationProvider.cs
- StringCollectionEditor.cs
- ApplicationProxyInternal.cs
- PersonalizableAttribute.cs
- LinqDataSourceDisposeEventArgs.cs
- HttpHandlerAction.cs
- SmiContextFactory.cs
- NumericUpDownAcceleration.cs
- GestureRecognitionResult.cs
- HMACMD5.cs
- RadioButtonAutomationPeer.cs
- Component.cs
- ControlLocalizer.cs
- IOException.cs
- CatalogPartCollection.cs
- FileLogRecord.cs
- XamlTreeBuilderBamlRecordWriter.cs
- ExpressionBuilder.cs
- PanelStyle.cs
- CachingHintValidation.cs
- SafeCertificateContext.cs
- FontFaceLayoutInfo.cs
- StyleModeStack.cs
- HostedImpersonationContext.cs
- EntityDataReader.cs
- X509CertificateChain.cs
- SynchronizedPool.cs
- BevelBitmapEffect.cs
- ThicknessConverter.cs
- HttpCookie.cs
- Trigger.cs
- Image.cs
- MatrixTransform.cs
- ChangeDirector.cs
- ServerProtocol.cs
- ConfigUtil.cs
- WindowsGraphicsCacheManager.cs
- EventMetadata.cs
- XmlPropertyBag.cs
- AssertFilter.cs
- unsafenativemethodsother.cs
- X509Certificate.cs
- BufferedStream2.cs
- X509Extension.cs
- CqlParserHelpers.cs