Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Objects / RelationshipWrapper.cs / 2 / RelationshipWrapper.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; using System.Data.Metadata.Edm; namespace System.Data.Objects { internal sealed class RelationshipWrapper : IEquatable{ internal readonly AssociationSet AssociationSet; internal readonly EntityKey Key0; internal readonly EntityKey Key1; internal RelationshipWrapper(AssociationSet extent, EntityKey key) { Debug.Assert(null != extent, "null RelationshipWrapper"); Debug.Assert(null != (object)key, "null key"); this.AssociationSet = extent; this.Key0 = key; this.Key1 = key; } internal RelationshipWrapper(RelationshipWrapper wrapper, int ordinal, EntityKey key) { Debug.Assert(null != wrapper, "null RelationshipWrapper"); Debug.Assert((uint)ordinal <= 1u, "ordinal out of range"); Debug.Assert(null != (object)key, "null key2"); this.AssociationSet = wrapper.AssociationSet; this.Key0 = (0 == ordinal) ? key : wrapper.Key0; this.Key1 = (0 == ordinal) ? wrapper.Key1 : key; } internal RelationshipWrapper(AssociationSet extent, KeyValuePair roleAndKey1, KeyValuePair roleAndKey2) : this(extent, roleAndKey1.Key, roleAndKey1.Value, roleAndKey2.Key, roleAndKey2.Value) { } internal RelationshipWrapper(AssociationSet extent, string role0, EntityKey key0, string role1, EntityKey key1) { Debug.Assert(null != extent, "null AssociationSet"); Debug.Assert(null != (object)key0, "null key0"); Debug.Assert(null != (object)key1, "null key1"); AssociationSet = extent; Debug.Assert(extent.ElementType.AssociationEndMembers.Count == 2, "only 2 ends are supported"); // this assert is explictly commented out to show that the two are similar but different // we should always use AssociationEndMembers, never CorrespondingAssociationEndMember //Debug.Assert(AssociationSet.AssociationSetEnds.Count == 2, "only 2 set ends supported"); //Debug.Assert(extent.ElementType.AssociationEndMembers[0] == AssociationSet.AssociationSetEnds[0].CorrespondingAssociationEndMember, "should be same end member"); //Debug.Assert(extent.ElementType.AssociationEndMembers[1] == AssociationSet.AssociationSetEnds[1].CorrespondingAssociationEndMember, "should be same end member"); if (extent.ElementType.AssociationEndMembers[0].Name == role0) { Debug.Assert(extent.ElementType.AssociationEndMembers[1].Name == role1, "a)roleAndKey1 Name differs"); Key0 = key0; Key1 = key1; } else { Debug.Assert(extent.ElementType.AssociationEndMembers[0].Name == role1, "b)roleAndKey1 Name differs"); Debug.Assert(extent.ElementType.AssociationEndMembers[1].Name == role0, "b)roleAndKey0 Name differs"); Key0 = key1; Key1 = key0; } } internal ReadOnlyMetadataCollection AssociationEndMembers { get { return this.AssociationSet.ElementType.AssociationEndMembers; } } internal AssociationEndMember GetAssociationEndMember(EntityKey key) { Debug.Assert(Key0 == key || Key1 == key, "didn't match a key"); return AssociationEndMembers[(Key0 != key) ? 1 : 0]; } internal EntityKey GetOtherEntityKey(EntityKey key) { return ((Key0 == key) ? Key1 : ((Key1 == key) ? Key0 : null)); } internal EntityKey GetEntityKey(int ordinal) { switch (ordinal) { case 0: return Key0; case 1: return Key1; default: throw EntityUtil.ArgumentOutOfRange("ordinal"); } } public override int GetHashCode() { return this.AssociationSet.Name.GetHashCode() ^ (this.Key0.GetHashCode() + this.Key1.GetHashCode()); } public override bool Equals(object obj) { return Equals(obj as RelationshipWrapper); } public bool Equals(RelationshipWrapper wrapper) { return (Object.ReferenceEquals(this, wrapper) || ((null != wrapper) && Object.ReferenceEquals(this.AssociationSet, wrapper.AssociationSet) && this.Key0.Equals(wrapper.Key0) && this.Key1.Equals(wrapper.Key1))); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; using System.Data.Metadata.Edm; namespace System.Data.Objects { internal sealed class RelationshipWrapper : IEquatable{ internal readonly AssociationSet AssociationSet; internal readonly EntityKey Key0; internal readonly EntityKey Key1; internal RelationshipWrapper(AssociationSet extent, EntityKey key) { Debug.Assert(null != extent, "null RelationshipWrapper"); Debug.Assert(null != (object)key, "null key"); this.AssociationSet = extent; this.Key0 = key; this.Key1 = key; } internal RelationshipWrapper(RelationshipWrapper wrapper, int ordinal, EntityKey key) { Debug.Assert(null != wrapper, "null RelationshipWrapper"); Debug.Assert((uint)ordinal <= 1u, "ordinal out of range"); Debug.Assert(null != (object)key, "null key2"); this.AssociationSet = wrapper.AssociationSet; this.Key0 = (0 == ordinal) ? key : wrapper.Key0; this.Key1 = (0 == ordinal) ? wrapper.Key1 : key; } internal RelationshipWrapper(AssociationSet extent, KeyValuePair roleAndKey1, KeyValuePair roleAndKey2) : this(extent, roleAndKey1.Key, roleAndKey1.Value, roleAndKey2.Key, roleAndKey2.Value) { } internal RelationshipWrapper(AssociationSet extent, string role0, EntityKey key0, string role1, EntityKey key1) { Debug.Assert(null != extent, "null AssociationSet"); Debug.Assert(null != (object)key0, "null key0"); Debug.Assert(null != (object)key1, "null key1"); AssociationSet = extent; Debug.Assert(extent.ElementType.AssociationEndMembers.Count == 2, "only 2 ends are supported"); // this assert is explictly commented out to show that the two are similar but different // we should always use AssociationEndMembers, never CorrespondingAssociationEndMember //Debug.Assert(AssociationSet.AssociationSetEnds.Count == 2, "only 2 set ends supported"); //Debug.Assert(extent.ElementType.AssociationEndMembers[0] == AssociationSet.AssociationSetEnds[0].CorrespondingAssociationEndMember, "should be same end member"); //Debug.Assert(extent.ElementType.AssociationEndMembers[1] == AssociationSet.AssociationSetEnds[1].CorrespondingAssociationEndMember, "should be same end member"); if (extent.ElementType.AssociationEndMembers[0].Name == role0) { Debug.Assert(extent.ElementType.AssociationEndMembers[1].Name == role1, "a)roleAndKey1 Name differs"); Key0 = key0; Key1 = key1; } else { Debug.Assert(extent.ElementType.AssociationEndMembers[0].Name == role1, "b)roleAndKey1 Name differs"); Debug.Assert(extent.ElementType.AssociationEndMembers[1].Name == role0, "b)roleAndKey0 Name differs"); Key0 = key1; Key1 = key0; } } internal ReadOnlyMetadataCollection AssociationEndMembers { get { return this.AssociationSet.ElementType.AssociationEndMembers; } } internal AssociationEndMember GetAssociationEndMember(EntityKey key) { Debug.Assert(Key0 == key || Key1 == key, "didn't match a key"); return AssociationEndMembers[(Key0 != key) ? 1 : 0]; } internal EntityKey GetOtherEntityKey(EntityKey key) { return ((Key0 == key) ? Key1 : ((Key1 == key) ? Key0 : null)); } internal EntityKey GetEntityKey(int ordinal) { switch (ordinal) { case 0: return Key0; case 1: return Key1; default: throw EntityUtil.ArgumentOutOfRange("ordinal"); } } public override int GetHashCode() { return this.AssociationSet.Name.GetHashCode() ^ (this.Key0.GetHashCode() + this.Key1.GetHashCode()); } public override bool Equals(object obj) { return Equals(obj as RelationshipWrapper); } public bool Equals(RelationshipWrapper wrapper) { return (Object.ReferenceEquals(this, wrapper) || ((null != wrapper) && Object.ReferenceEquals(this.AssociationSet, wrapper.AssociationSet) && this.Key0.Equals(wrapper.Key0) && this.Key1.Equals(wrapper.Key1))); } } } // 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
- RotateTransform3D.cs
- WpfWebRequestHelper.cs
- GridLengthConverter.cs
- DataFieldEditor.cs
- AnimationClockResource.cs
- AutomationPattern.cs
- FunctionImportElement.cs
- MediaPlayer.cs
- BooleanAnimationUsingKeyFrames.cs
- ArithmeticException.cs
- TypeListConverter.cs
- AsymmetricKeyExchangeDeformatter.cs
- ServiceX509SecurityTokenProvider.cs
- RegexNode.cs
- HtmlUtf8RawTextWriter.cs
- UnsafeNativeMethods.cs
- StyleHelper.cs
- SqlXmlStorage.cs
- ConfigurationException.cs
- WebExceptionStatus.cs
- CornerRadiusConverter.cs
- StrokeCollection.cs
- JumpList.cs
- XmlSignificantWhitespace.cs
- HttpCachePolicyElement.cs
- WindowHideOrCloseTracker.cs
- CharConverter.cs
- SortedList.cs
- UrlParameterReader.cs
- ViewCellSlot.cs
- PriorityQueue.cs
- AssemblyBuilder.cs
- PropertyMapper.cs
- RegexTree.cs
- BufferedGraphics.cs
- XmlSchemaNotation.cs
- CryptographicAttribute.cs
- SqlProcedureAttribute.cs
- ToggleButtonAutomationPeer.cs
- MailAddress.cs
- StructuralCache.cs
- WhitespaceSignificantCollectionAttribute.cs
- SelectionHighlightInfo.cs
- SvcFileManager.cs
- Int16Converter.cs
- HistoryEventArgs.cs
- ItemsPresenter.cs
- PageStatePersister.cs
- DataPagerFieldItem.cs
- DisableDpiAwarenessAttribute.cs
- _CommandStream.cs
- Range.cs
- VisualCollection.cs
- FilterException.cs
- ParentControlDesigner.cs
- BinaryVersion.cs
- DbCommandTree.cs
- CodeTypeParameterCollection.cs
- Point3D.cs
- MarginCollapsingState.cs
- VisualBasicSettings.cs
- dataprotectionpermission.cs
- DecimalConstantAttribute.cs
- LZCodec.cs
- SmtpNtlmAuthenticationModule.cs
- PrintingPermissionAttribute.cs
- DataTemplateKey.cs
- WorkflowInstance.cs
- KeyboardEventArgs.cs
- ScriptControlManager.cs
- IEnumerable.cs
- NumberSubstitution.cs
- ZipIOModeEnforcingStream.cs
- HandlerWithFactory.cs
- InputProviderSite.cs
- HostedElements.cs
- DataGridViewHitTestInfo.cs
- EnumValAlphaComparer.cs
- ActivityWithResult.cs
- SingleAnimationBase.cs
- NetPipeSection.cs
- SynchronousChannel.cs
- SafeNativeMemoryHandle.cs
- DbProviderSpecificTypePropertyAttribute.cs
- JournalEntryStack.cs
- TextRange.cs
- OpenTypeCommon.cs
- JsonDataContract.cs
- InfoCard.cs
- DelegateSerializationHolder.cs
- TextModifier.cs
- ColumnClickEvent.cs
- ProgressBar.cs
- RestClientProxyHandler.cs
- StateChangeEvent.cs
- SchemaReference.cs
- _NegoState.cs
- AutomationProperties.cs
- Collection.cs
- FileUtil.cs