Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / Map / ViewGeneration / Validation / ExtentKey.cs / 1 / ExtentKey.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Data.Common.Utils; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Data.Metadata.Edm; namespace System.Data.Mapping.ViewGeneration.Structures { // This class represents the key of constraint on values that a relation slot may have internal class ExtentKey : InternalBase { #region Constructors // effects: Creates a key object for an extent (present in each MemberPath) // with the fields corresponding to keyFields internal ExtentKey(IEnumerablekeyFields) { m_keyFields = new List (keyFields); } #endregion #region Fields // All the key fields in an entity set private List m_keyFields; #endregion #region Properties internal IEnumerable KeyFields { get { return m_keyFields; } } #endregion #region Methods // effects: Determines all the keys (unique and primary for // entityType) for entityType and returns a key. "prefix" gives the // path of the extent or end of a relationship in a relationship set // -- prefix is prepended to the entity's key fields to get the full memberpath internal static List GetKeysForEntityType(MemberPath prefix, EntityType entityType) { // CHANGE_[....]_MULTIPLE_KEYS: currently there is a single key only. Need to support // keys inside complex types + unique keys ExtentKey key = GetPrimaryKeyForEntityType(prefix, entityType); List keys = new List (); keys.Add(key); return keys; } // effects: Returns the key for entityType prefixed with prefix (for // its memberPath) internal static ExtentKey GetPrimaryKeyForEntityType(MemberPath prefix, EntityType entityType) { List keyFields = new List (); foreach (EdmMember keyMember in entityType.KeyMembers) { Debug.Assert(keyMember != null, "Bogus key member in metadata"); keyFields.Add(new MemberPath(prefix, keyMember)); } // Just have one key for now ExtentKey key = new ExtentKey(keyFields); return key; } // effects: Returns a key correspnding to all the fields in different // ends of relationtype prefixed with "prefix" internal static ExtentKey GetKeyForRelationType(MemberPath prefix, AssociationType relationType) { List keyFields = new List (); foreach (AssociationEndMember endMember in relationType.AssociationEndMembers) { MemberPath endPrefix = new MemberPath(prefix, endMember); EntityType entityType = MetadataHelper.GetEntityTypeForEnd(endMember); ExtentKey primaryKey = GetPrimaryKeyForEntityType(endPrefix, entityType); keyFields.AddRange(primaryKey.KeyFields); } ExtentKey key = new ExtentKey(keyFields); return key; } internal string ToUserString() { string result = StringUtil.ToCommaSeparatedStringSorted(m_keyFields); return result; } internal override void ToCompactString(StringBuilder builder) { StringUtil.ToCommaSeparatedStringSorted(builder, m_keyFields); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Data.Common.Utils; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Data.Metadata.Edm; namespace System.Data.Mapping.ViewGeneration.Structures { // This class represents the key of constraint on values that a relation slot may have internal class ExtentKey : InternalBase { #region Constructors // effects: Creates a key object for an extent (present in each MemberPath) // with the fields corresponding to keyFields internal ExtentKey(IEnumerablekeyFields) { m_keyFields = new List (keyFields); } #endregion #region Fields // All the key fields in an entity set private List m_keyFields; #endregion #region Properties internal IEnumerable KeyFields { get { return m_keyFields; } } #endregion #region Methods // effects: Determines all the keys (unique and primary for // entityType) for entityType and returns a key. "prefix" gives the // path of the extent or end of a relationship in a relationship set // -- prefix is prepended to the entity's key fields to get the full memberpath internal static List GetKeysForEntityType(MemberPath prefix, EntityType entityType) { // CHANGE_[....]_MULTIPLE_KEYS: currently there is a single key only. Need to support // keys inside complex types + unique keys ExtentKey key = GetPrimaryKeyForEntityType(prefix, entityType); List keys = new List (); keys.Add(key); return keys; } // effects: Returns the key for entityType prefixed with prefix (for // its memberPath) internal static ExtentKey GetPrimaryKeyForEntityType(MemberPath prefix, EntityType entityType) { List keyFields = new List (); foreach (EdmMember keyMember in entityType.KeyMembers) { Debug.Assert(keyMember != null, "Bogus key member in metadata"); keyFields.Add(new MemberPath(prefix, keyMember)); } // Just have one key for now ExtentKey key = new ExtentKey(keyFields); return key; } // effects: Returns a key correspnding to all the fields in different // ends of relationtype prefixed with "prefix" internal static ExtentKey GetKeyForRelationType(MemberPath prefix, AssociationType relationType) { List keyFields = new List (); foreach (AssociationEndMember endMember in relationType.AssociationEndMembers) { MemberPath endPrefix = new MemberPath(prefix, endMember); EntityType entityType = MetadataHelper.GetEntityTypeForEnd(endMember); ExtentKey primaryKey = GetPrimaryKeyForEntityType(endPrefix, entityType); keyFields.AddRange(primaryKey.KeyFields); } ExtentKey key = new ExtentKey(keyFields); return key; } internal string ToUserString() { string result = StringUtil.ToCommaSeparatedStringSorted(m_keyFields); return result; } internal override void ToCompactString(StringBuilder builder) { StringUtil.ToCommaSeparatedStringSorted(builder, m_keyFields); } #endregion } } // 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
- FileUpload.cs
- XmlCharCheckingReader.cs
- FrameworkRichTextComposition.cs
- SafeViewOfFileHandle.cs
- StringComparer.cs
- WpfXamlType.cs
- ExpandSegment.cs
- ObjectViewListener.cs
- XmlSchemaIdentityConstraint.cs
- SectionInformation.cs
- DateTimeValueSerializerContext.cs
- RadioButtonAutomationPeer.cs
- WindowShowOrOpenTracker.cs
- AppDomainProtocolHandler.cs
- QueryStringConverter.cs
- ProfileSettings.cs
- StringUtil.cs
- ADMembershipUser.cs
- RefType.cs
- DbConnectionPoolIdentity.cs
- StyleTypedPropertyAttribute.cs
- ApplicationManager.cs
- BamlBinaryReader.cs
- EndCreateSecurityTokenRequest.cs
- SharingService.cs
- ShapeTypeface.cs
- SrgsRuleRef.cs
- NonVisualControlAttribute.cs
- ShaderRenderModeValidation.cs
- ZoneButton.cs
- ListViewItem.cs
- Converter.cs
- Compiler.cs
- DataContractJsonSerializerOperationFormatter.cs
- ParameterToken.cs
- CurrentChangedEventManager.cs
- TextStore.cs
- ZipIOModeEnforcingStream.cs
- SQLInt16Storage.cs
- ProcessHostFactoryHelper.cs
- SingleAnimationUsingKeyFrames.cs
- ProviderBase.cs
- XmlElementAttributes.cs
- MetadataUtil.cs
- XmlRawWriter.cs
- FontFamily.cs
- FormViewRow.cs
- x509store.cs
- QuestionEventArgs.cs
- SecurityTraceRecordHelper.cs
- Instrumentation.cs
- LinkAreaEditor.cs
- RepeaterDataBoundAdapter.cs
- WorkflowInvoker.cs
- HwndAppCommandInputProvider.cs
- DecimalConverter.cs
- BitVector32.cs
- LocatorGroup.cs
- TypeLoader.cs
- CheckBoxAutomationPeer.cs
- Substitution.cs
- HitTestResult.cs
- TimeSpanValidatorAttribute.cs
- DropDownList.cs
- ProtectedProviderSettings.cs
- InvalidateEvent.cs
- Comparer.cs
- ParseHttpDate.cs
- JsonServiceDocumentSerializer.cs
- SecurityToken.cs
- FileSystemEnumerable.cs
- SelectionManager.cs
- EnumCodeDomSerializer.cs
- WmlValidationSummaryAdapter.cs
- StaticResourceExtension.cs
- RenamedEventArgs.cs
- RedirectionProxy.cs
- EntityTransaction.cs
- WrappedKeySecurityToken.cs
- Misc.cs
- WebEvents.cs
- MembershipAdapter.cs
- MexHttpBindingCollectionElement.cs
- ImplicitInputBrush.cs
- SynchronizedDispatch.cs
- SafeBitVector32.cs
- TypeListConverter.cs
- KeyPressEvent.cs
- Animatable.cs
- ToolStripOverflowButton.cs
- PolyLineSegment.cs
- ConfigurationValues.cs
- ProfileService.cs
- FullTextBreakpoint.cs
- Pointer.cs
- ServerType.cs
- DataGridViewBindingCompleteEventArgs.cs
- WebPartHelpVerb.cs
- CodeCompileUnit.cs
- SubpageParaClient.cs