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
- ModifierKeysValueSerializer.cs
- SHA512Managed.cs
- RequestCachingSection.cs
- Line.cs
- SafeNativeMethodsOther.cs
- SystemWebExtensionsSectionGroup.cs
- OutOfMemoryException.cs
- DBDataPermissionAttribute.cs
- JournalEntry.cs
- OutputCacheSection.cs
- Point4DValueSerializer.cs
- DataGridViewAutoSizeModeEventArgs.cs
- Maps.cs
- PeerInvitationResponse.cs
- CacheForPrimitiveTypes.cs
- ShortcutKeysEditor.cs
- SafeNativeMethodsCLR.cs
- TaskSchedulerException.cs
- WebSysDescriptionAttribute.cs
- coordinatorfactory.cs
- TextModifier.cs
- LinkDesigner.cs
- WebPartVerbsEventArgs.cs
- EntityDataSourceUtil.cs
- IdentitySection.cs
- SurrogateEncoder.cs
- DesignObjectWrapper.cs
- RtfControls.cs
- RecognitionEventArgs.cs
- PagedControl.cs
- TransactedBatchingElement.cs
- Pen.cs
- Column.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- TemplateField.cs
- TextTreeRootNode.cs
- CompositeCollectionView.cs
- VirtualPath.cs
- CaseInsensitiveComparer.cs
- XsdDateTime.cs
- ColumnMapVisitor.cs
- ToolStripPanel.cs
- Select.cs
- DetailsViewModeEventArgs.cs
- FilteredDataSetHelper.cs
- EventDrivenDesigner.cs
- SystemWebExtensionsSectionGroup.cs
- PropertyIDSet.cs
- COM2IPerPropertyBrowsingHandler.cs
- CommandValueSerializer.cs
- Camera.cs
- MasterPage.cs
- FontFamilyIdentifier.cs
- RouteParametersHelper.cs
- Timer.cs
- BamlStream.cs
- FixedPageStructure.cs
- SByteConverter.cs
- DataPagerFieldCollection.cs
- SemanticAnalyzer.cs
- DeflateStream.cs
- ChangePassword.cs
- SqlConnectionString.cs
- ExpressionBinding.cs
- WebHeaderCollection.cs
- TreePrinter.cs
- OdbcPermission.cs
- OleDbStruct.cs
- SystemIcmpV6Statistics.cs
- UnaryNode.cs
- CellConstant.cs
- UrlMappingsModule.cs
- MoveSizeWinEventHandler.cs
- SafeFileMappingHandle.cs
- ResXBuildProvider.cs
- FileInfo.cs
- RuntimeIdentifierPropertyAttribute.cs
- ListBox.cs
- CalendarModeChangedEventArgs.cs
- HttpCachePolicy.cs
- TrackingWorkflowEventArgs.cs
- DynamicExpression.cs
- CommandField.cs
- ListBox.cs
- CustomLineCap.cs
- CollectionChangeEventArgs.cs
- ExpressionNode.cs
- Invariant.cs
- AutomationPatternInfo.cs
- CollectionBuilder.cs
- SemanticResolver.cs
- ProxyWebPartManager.cs
- OletxResourceManager.cs
- LineBreak.cs
- TextAction.cs
- BrowserCapabilitiesFactoryBase.cs
- PropertyPathConverter.cs
- InvalidPrinterException.cs
- ConfigurationPermission.cs
- ModelUIElement3D.cs