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
- CompositeActivityCodeGenerator.cs
- ContractAdapter.cs
- XamlHostingSectionGroup.cs
- figurelengthconverter.cs
- TableItemPatternIdentifiers.cs
- FrugalMap.cs
- PolicyDesigner.cs
- JapaneseLunisolarCalendar.cs
- DuplexChannel.cs
- PassportAuthentication.cs
- SystemPens.cs
- PeerApplication.cs
- GatewayIPAddressInformationCollection.cs
- MachineSettingsSection.cs
- JournalEntryStack.cs
- CommunicationObjectFaultedException.cs
- RuleConditionDialog.Designer.cs
- DataGridViewTopLeftHeaderCell.cs
- ObjectDataSourceMethodEventArgs.cs
- AutomationElement.cs
- DbCommandTree.cs
- SplitterCancelEvent.cs
- ThicknessConverter.cs
- ListViewCommandEventArgs.cs
- CustomWebEventKey.cs
- HttpServerUtilityBase.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- ListBoxChrome.cs
- Repeater.cs
- TreeIterator.cs
- BitmapSourceSafeMILHandle.cs
- SharedStatics.cs
- WindowsTab.cs
- TextProviderWrapper.cs
- StateMachineAction.cs
- XmlCharType.cs
- SignatureResourcePool.cs
- ResourcesBuildProvider.cs
- SqlMethods.cs
- CodeAttributeArgument.cs
- loginstatus.cs
- WebRequestModulesSection.cs
- RewritingProcessor.cs
- WebPartExportVerb.cs
- CheckBox.cs
- EmptyEnumerator.cs
- NativeMethods.cs
- UICuesEvent.cs
- CryptoApi.cs
- diagnosticsswitches.cs
- ChannelServices.cs
- ClientTargetCollection.cs
- FormViewCommandEventArgs.cs
- WeakHashtable.cs
- ServiceElement.cs
- EventSourceCreationData.cs
- __Error.cs
- CodePageEncoding.cs
- EntityClassGenerator.cs
- HierarchicalDataSourceConverter.cs
- TransferRequestHandler.cs
- MimeXmlImporter.cs
- MouseBinding.cs
- UrlEncodedParameterWriter.cs
- AutomationPatternInfo.cs
- Int32Rect.cs
- OleDbTransaction.cs
- PriorityChain.cs
- HTTPNotFoundHandler.cs
- CommentGlyph.cs
- XmlName.cs
- ObjectStorage.cs
- TextContainerChangeEventArgs.cs
- EpmTargetPathSegment.cs
- OrderedDictionary.cs
- PageClientProxyGenerator.cs
- EditingMode.cs
- TimeSpanOrInfiniteConverter.cs
- RolePrincipal.cs
- Shape.cs
- DetailsViewModeEventArgs.cs
- basevalidator.cs
- DataTableReader.cs
- MsmqIntegrationMessageProperty.cs
- DbProviderConfigurationHandler.cs
- DataControlFieldCell.cs
- DynamicScriptObject.cs
- WindowsGraphicsWrapper.cs
- WebPartsPersonalizationAuthorization.cs
- HotCommands.cs
- XhtmlConformanceSection.cs
- DependencyObject.cs
- ObjectMemberMapping.cs
- ArrayWithOffset.cs
- EditCommandColumn.cs
- CellConstant.cs
- AsyncResult.cs
- SourceFilter.cs
- SqlCommandBuilder.cs
- RotateTransform3D.cs