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
- RoutedEventHandlerInfo.cs
- Site.cs
- CommandID.cs
- SessionIDManager.cs
- BinaryConverter.cs
- Sql8ConformanceChecker.cs
- Adorner.cs
- XmlStreamStore.cs
- PropertyValidationContext.cs
- MimeMultiPart.cs
- XmlReflectionImporter.cs
- RuleInfoComparer.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- SqlFlattener.cs
- FormsAuthentication.cs
- InstanceNotReadyException.cs
- GridViewHeaderRowPresenter.cs
- CacheAxisQuery.cs
- RelationshipType.cs
- ListBoxChrome.cs
- SqlHelper.cs
- HMACSHA384.cs
- AdRotator.cs
- DataGridViewCellCancelEventArgs.cs
- AvTraceFormat.cs
- ReceiveActivityDesigner.cs
- ApplicationBuildProvider.cs
- ApplicationManager.cs
- X509Certificate2.cs
- Odbc32.cs
- XPathMultyIterator.cs
- CodeSnippetStatement.cs
- EventListener.cs
- ParallelDesigner.cs
- XPathPatternParser.cs
- ObjectViewListener.cs
- XPathConvert.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- DataGridViewRowHeaderCell.cs
- UpnEndpointIdentityExtension.cs
- BasicKeyConstraint.cs
- SchemaManager.cs
- DataSourceViewSchemaConverter.cs
- XAMLParseException.cs
- Effect.cs
- RichTextBox.cs
- DataServiceResponse.cs
- SecureUICommand.cs
- OdbcErrorCollection.cs
- ValidationErrorCollection.cs
- CqlWriter.cs
- RequestCacheEntry.cs
- TransactionException.cs
- TraceContextEventArgs.cs
- EnumMember.cs
- ApplicationDirectoryMembershipCondition.cs
- AuthenticationServiceManager.cs
- Clause.cs
- CompletedAsyncResult.cs
- DataGridComboBoxColumn.cs
- KeyGesture.cs
- StretchValidation.cs
- NeutralResourcesLanguageAttribute.cs
- TCPClient.cs
- GradientStopCollection.cs
- DataGridCellInfo.cs
- ProtocolsConfigurationEntry.cs
- GlyphRunDrawing.cs
- DesignSurface.cs
- SiblingIterators.cs
- InputDevice.cs
- IpcChannelHelper.cs
- util.cs
- RequestCache.cs
- AttributeExtensions.cs
- TextEditorDragDrop.cs
- TransformationRules.cs
- DnsPermission.cs
- DefaultTraceListener.cs
- KeyPullup.cs
- CryptoKeySecurity.cs
- ServicesUtilities.cs
- DataGridViewBand.cs
- SplitterEvent.cs
- ThemeableAttribute.cs
- FormattedTextSymbols.cs
- XmlAttributeCollection.cs
- ToggleProviderWrapper.cs
- DataSourceXmlSerializer.cs
- QueryAsyncResult.cs
- WindowsFormsHostAutomationPeer.cs
- FileDataSourceCache.cs
- ActivityLocationReferenceEnvironment.cs
- MimeReturn.cs
- WMIGenerator.cs
- ScriptResourceMapping.cs
- CodeTypeDelegate.cs
- PropertyMapper.cs
- COM2IDispatchConverter.cs
- ContentPosition.cs