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
- PreProcessInputEventArgs.cs
- SqlHelper.cs
- wgx_commands.cs
- InProcStateClientManager.cs
- safemediahandle.cs
- ControlTemplate.cs
- MergeExecutor.cs
- DataTemplateSelector.cs
- DateTimeFormat.cs
- PropertyDescriptor.cs
- LocalBuilder.cs
- NativeMethods.cs
- ItemList.cs
- GridEntryCollection.cs
- RoleManagerSection.cs
- WmlTextViewAdapter.cs
- Model3DGroup.cs
- InheritedPropertyDescriptor.cs
- StrokeCollection.cs
- XmlBufferReader.cs
- ResolveCriteria11.cs
- SelectionChangedEventArgs.cs
- SymbolType.cs
- WindowsClaimSet.cs
- SelfIssuedAuthRSAPKCS1SignatureFormatter.cs
- TextLine.cs
- FileNotFoundException.cs
- UriParserTemplates.cs
- MarkupExtensionParser.cs
- TemplatedMailWebEventProvider.cs
- Camera.cs
- PropertySourceInfo.cs
- ArgumentNullException.cs
- SmtpAuthenticationManager.cs
- UInt16.cs
- BmpBitmapEncoder.cs
- XmlUtil.cs
- XmlSchemaException.cs
- TransformProviderWrapper.cs
- DeclarativeCatalogPart.cs
- TextBreakpoint.cs
- UnsafeNativeMethods.cs
- HwndSource.cs
- TemplateControlParser.cs
- Thickness.cs
- EqualityComparer.cs
- VisualStyleTypesAndProperties.cs
- HttpListenerException.cs
- TemplatedMailWebEventProvider.cs
- QilValidationVisitor.cs
- CharAnimationUsingKeyFrames.cs
- returneventsaver.cs
- SessionIDManager.cs
- SoapAttributeOverrides.cs
- WebPartAddingEventArgs.cs
- SamlSerializer.cs
- UniqueEventHelper.cs
- SqlNamer.cs
- CompilerScopeManager.cs
- Tag.cs
- DelegateTypeInfo.cs
- InlineObject.cs
- TemplateParser.cs
- LayoutEditorPart.cs
- HierarchicalDataSourceControl.cs
- RecordBuilder.cs
- PageEventArgs.cs
- ReaderWriterLock.cs
- CodeAccessPermission.cs
- SemanticAnalyzer.cs
- ServiceOperationWrapper.cs
- FixedSOMTextRun.cs
- EntityDataSourceContainerNameItem.cs
- UrlAuthorizationModule.cs
- HtmlImage.cs
- SqlCommand.cs
- ConnectionOrientedTransportElement.cs
- HtmlTernaryTree.cs
- ExceptionUtil.cs
- NestedContainer.cs
- LocalizationCodeDomSerializer.cs
- NameValuePermission.cs
- BuildManagerHost.cs
- WCFBuildProvider.cs
- entitydatasourceentitysetnameconverter.cs
- CatalogPartChrome.cs
- LockRecoveryTask.cs
- NavigationService.cs
- EntitySqlQueryCacheKey.cs
- MsmqIntegrationChannelFactory.cs
- DetailsViewDeletedEventArgs.cs
- ResizeGrip.cs
- IISUnsafeMethods.cs
- HuffCodec.cs
- localization.cs
- PropertyToken.cs
- CapabilitiesRule.cs
- MessageDecoder.cs
- CategoryGridEntry.cs
- ZipIOExtraField.cs