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
- CompositeActivityDesigner.cs
- XmlSerializerFactory.cs
- SqlTriggerAttribute.cs
- webbrowsersite.cs
- FileChangesMonitor.cs
- StyleXamlTreeBuilder.cs
- ComponentEditorForm.cs
- VolatileEnlistmentMultiplexing.cs
- EventBindingService.cs
- MediaElement.cs
- ColorTranslator.cs
- SiblingIterators.cs
- ProxyWebPartManager.cs
- DataGrid.cs
- DataColumnMappingCollection.cs
- MenuEventArgs.cs
- CopyNodeSetAction.cs
- Configuration.cs
- SigningProgress.cs
- PerformanceCounters.cs
- securitycriticaldataformultiplegetandset.cs
- GlyphShapingProperties.cs
- XmlIlTypeHelper.cs
- SetterBaseCollection.cs
- Vector3DCollectionConverter.cs
- SqlNodeAnnotation.cs
- SoapServerMessage.cs
- XmlDataDocument.cs
- LiteralControl.cs
- WinHttpWebProxyFinder.cs
- WebResourceAttribute.cs
- StrokeNodeOperations.cs
- sqlstateclientmanager.cs
- DiscriminatorMap.cs
- ConfigurationElement.cs
- IteratorFilter.cs
- TdsValueSetter.cs
- SecurityPolicySection.cs
- DataTableExtensions.cs
- SystemResourceHost.cs
- Matrix3D.cs
- SqlRewriteScalarSubqueries.cs
- ShapingWorkspace.cs
- CfgParser.cs
- ShaderEffect.cs
- WebBaseEventKeyComparer.cs
- SingleAnimationUsingKeyFrames.cs
- ObservableCollection.cs
- MediaPlayer.cs
- PlacementWorkspace.cs
- DateBoldEvent.cs
- _DynamicWinsockMethods.cs
- AuthorizationRuleCollection.cs
- TagMapCollection.cs
- EntityProxyTypeInfo.cs
- XmlnsPrefixAttribute.cs
- AuthorizationRuleCollection.cs
- TimeEnumHelper.cs
- LinqDataView.cs
- DoubleConverter.cs
- TextRangeEditLists.cs
- EntityTypeBase.cs
- TreeViewHitTestInfo.cs
- WebCodeGenerator.cs
- LambdaCompiler.Binary.cs
- BigIntegerStorage.cs
- OdbcHandle.cs
- DashStyles.cs
- DataTemplate.cs
- ScrollBarRenderer.cs
- UnsafeNativeMethods.cs
- EmbeddedMailObject.cs
- InvokeProviderWrapper.cs
- Stack.cs
- ColumnReorderedEventArgs.cs
- ExpandableObjectConverter.cs
- TypeDependencyAttribute.cs
- CompensatableTransactionScopeActivityDesigner.cs
- SoapObjectInfo.cs
- ApplicationFileParser.cs
- WindowsProgressbar.cs
- FlowLayoutPanel.cs
- QuaternionConverter.cs
- WebPartConnectionCollection.cs
- BitmapData.cs
- Image.cs
- formatter.cs
- DataGridViewRowHeaderCell.cs
- RepeaterItem.cs
- Variable.cs
- ViewStateModeByIdAttribute.cs
- DataGridViewCellCollection.cs
- Shared.cs
- SaveFileDialog.cs
- BamlBinaryReader.cs
- MemberDescriptor.cs
- XpsFilter.cs
- CommandBindingCollection.cs
- XmlImplementation.cs
- CollectionTypeElement.cs