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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XsdCachingReader.cs
- PriorityQueue.cs
- CountdownEvent.cs
- SemaphoreSlim.cs
- FastEncoderWindow.cs
- DocumentViewerAutomationPeer.cs
- DownloadProgressEventArgs.cs
- TriggerBase.cs
- GradientPanel.cs
- TemplatingOptionsDialog.cs
- CrossContextChannel.cs
- Context.cs
- DocumentScope.cs
- GenericTextProperties.cs
- TableItemStyle.cs
- DesignerActionList.cs
- ProvidersHelper.cs
- BrowserDefinitionCollection.cs
- HyperLink.cs
- MutexSecurity.cs
- SqlClientMetaDataCollectionNames.cs
- EntityParameterCollection.cs
- EventRecord.cs
- BitFlagsGenerator.cs
- DoubleCollectionValueSerializer.cs
- XmlDomTextWriter.cs
- HtmlWindow.cs
- CompiledRegexRunner.cs
- PopupRootAutomationPeer.cs
- XmlTextReaderImplHelpers.cs
- ListControl.cs
- CodeLabeledStatement.cs
- _TransmitFileOverlappedAsyncResult.cs
- EntityProviderFactory.cs
- Vector3DAnimationBase.cs
- CellQuery.cs
- Exception.cs
- MobileControl.cs
- GlobalizationSection.cs
- TransformerTypeCollection.cs
- ConfigPathUtility.cs
- ToolStripSeparator.cs
- BuildDependencySet.cs
- FontCollection.cs
- Object.cs
- Blend.cs
- DefaultBinder.cs
- SessionStateModule.cs
- OdbcException.cs
- XmlTextReaderImplHelpers.cs
- OdbcInfoMessageEvent.cs
- DataBoundLiteralControl.cs
- ExceptionHandler.cs
- SymmetricCryptoHandle.cs
- ExtenderControl.cs
- WebPartTransformerAttribute.cs
- LinqDataSourceEditData.cs
- WsrmTraceRecord.cs
- DataRelation.cs
- LinqDataSourceStatusEventArgs.cs
- PrintDocument.cs
- ThrowHelper.cs
- FrameworkRichTextComposition.cs
- StreamGeometry.cs
- XmlAnyElementAttribute.cs
- WebConfigurationFileMap.cs
- FixedSOMGroup.cs
- ExternalDataExchangeService.cs
- FormViewUpdatedEventArgs.cs
- HttpFormatExtensions.cs
- InputLanguage.cs
- EntityContainerRelationshipSet.cs
- EmptyCollection.cs
- VerticalAlignConverter.cs
- BrowserCapabilitiesFactory35.cs
- SQLStringStorage.cs
- WebPartsSection.cs
- nulltextcontainer.cs
- GlyphInfoList.cs
- DbMetaDataCollectionNames.cs
- FixedSOMPage.cs
- FormViewPageEventArgs.cs
- storagemappingitemcollection.viewdictionary.cs
- DbModificationClause.cs
- LocationSectionRecord.cs
- RSAPKCS1KeyExchangeFormatter.cs
- StylusLogic.cs
- DoubleLinkListEnumerator.cs
- PropertyTabAttribute.cs
- ProfileModule.cs
- SpinWait.cs
- WSTransactionSection.cs
- NotifyParentPropertyAttribute.cs
- PixelFormats.cs
- IItemProperties.cs
- NodeLabelEditEvent.cs
- EnumBuilder.cs
- SettingsPropertyWrongTypeException.cs
- ReceiveParametersContent.cs
- RealizationContext.cs