Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Map / ViewGeneration / Validation / ExtentKey.cs / 1305376 / 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
- PropertyItemInternal.cs
- TransportChannelListener.cs
- GcSettings.cs
- CommonDialog.cs
- DynamicDocumentPaginator.cs
- Fonts.cs
- ControlAdapter.cs
- CheckBoxStandardAdapter.cs
- LogicalExpressionEditor.cs
- FormViewUpdateEventArgs.cs
- Package.cs
- PersonalizationProviderHelper.cs
- ProfilePropertyNameValidator.cs
- DataBindingCollectionConverter.cs
- MaterializeFromAtom.cs
- DuplexChannel.cs
- WindowsIdentity.cs
- RotateTransform3D.cs
- SymLanguageVendor.cs
- RangeValuePatternIdentifiers.cs
- Faults.cs
- EntitySqlQueryCacheKey.cs
- AnnotationHighlightLayer.cs
- XmlArrayItemAttribute.cs
- Hyperlink.cs
- Win32PrintDialog.cs
- XhtmlBasicImageAdapter.cs
- SolidColorBrush.cs
- ReaderWriterLock.cs
- GradientSpreadMethodValidation.cs
- FreezableCollection.cs
- FontNamesConverter.cs
- XmlObjectSerializerReadContextComplexJson.cs
- InternalPermissions.cs
- ContextProperty.cs
- DeploymentSection.cs
- GeometryModel3D.cs
- DocumentXPathNavigator.cs
- BlockUIContainer.cs
- _LocalDataStoreMgr.cs
- RelOps.cs
- SamlDelegatingWriter.cs
- SByteStorage.cs
- NullableConverter.cs
- ExpanderAutomationPeer.cs
- LocatorPart.cs
- DecimalAnimationBase.cs
- AdornedElementPlaceholder.cs
- VariableQuery.cs
- LinkedResourceCollection.cs
- CacheForPrimitiveTypes.cs
- Latin1Encoding.cs
- SBCSCodePageEncoding.cs
- SoapObjectInfo.cs
- VirtualPathUtility.cs
- CngAlgorithm.cs
- InputGestureCollection.cs
- Ops.cs
- SchemaImporter.cs
- ObjectToIdCache.cs
- EntityDataSourceContainerNameItem.cs
- Color.cs
- ExtensionQuery.cs
- XmlSchemaComplexContent.cs
- ColumnMapCopier.cs
- GlobalEventManager.cs
- DBConnectionString.cs
- IsolatedStoragePermission.cs
- EmptyEnumerable.cs
- XPathNavigator.cs
- ContentFileHelper.cs
- SchemaMapping.cs
- SessionStateContainer.cs
- OutOfProcStateClientManager.cs
- HtmlImage.cs
- XmlSerializerFormatAttribute.cs
- LinkAreaEditor.cs
- DbDeleteCommandTree.cs
- RequiredFieldValidator.cs
- DataColumnMapping.cs
- RuntimeConfigurationRecord.cs
- TableLayout.cs
- TypeElement.cs
- SQLResource.cs
- CollectionBuilder.cs
- ListenerElementsCollection.cs
- CacheRequest.cs
- ParallelTimeline.cs
- TextInfo.cs
- ContentValidator.cs
- TextRunCache.cs
- DesignerRegionMouseEventArgs.cs
- TextChangedEventArgs.cs
- CellLabel.cs
- SortQuery.cs
- WebPartConnectionsDisconnectVerb.cs
- DataPointer.cs
- RectAnimation.cs
- SoapExtensionReflector.cs
- IssuedTokenClientElement.cs