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
- Adorner.cs
- localization.cs
- ReferencedCollectionType.cs
- SiteOfOriginContainer.cs
- DiagnosticTraceSource.cs
- CodeAttributeArgument.cs
- ImageSourceConverter.cs
- Button.cs
- Crypto.cs
- WeakReadOnlyCollection.cs
- TextServicesProperty.cs
- MessageRpc.cs
- EntityClientCacheEntry.cs
- Attributes.cs
- StringAnimationBase.cs
- UnsafeNativeMethods.cs
- SignedXml.cs
- GridViewRowEventArgs.cs
- RemotingException.cs
- NetMsmqSecurityElement.cs
- UInt64Converter.cs
- GlobalProxySelection.cs
- TreeIterator.cs
- AsyncWaitHandle.cs
- UpdateException.cs
- ObjectMemberMapping.cs
- XPathDocumentBuilder.cs
- PasswordBoxAutomationPeer.cs
- CallSiteHelpers.cs
- NameValueSectionHandler.cs
- Currency.cs
- XmlNavigatorFilter.cs
- Win32.cs
- ExpandSegment.cs
- VariableQuery.cs
- InvalidComObjectException.cs
- OrCondition.cs
- DataGridViewLinkCell.cs
- ViewStateModeByIdAttribute.cs
- XmlEventCache.cs
- RijndaelManagedTransform.cs
- CodeDOMUtility.cs
- Timer.cs
- XPathDescendantIterator.cs
- CopyAction.cs
- PassportAuthenticationEventArgs.cs
- ContainerParagraph.cs
- FontStyle.cs
- EdmScalarPropertyAttribute.cs
- CodeBinaryOperatorExpression.cs
- AsymmetricSignatureFormatter.cs
- ConvertersCollection.cs
- DynamicQueryStringParameter.cs
- ForEachDesigner.xaml.cs
- GiveFeedbackEventArgs.cs
- PageTheme.cs
- RawStylusSystemGestureInputReport.cs
- ObjectDataProvider.cs
- DataServiceQueryException.cs
- HiddenFieldPageStatePersister.cs
- WindowsGraphicsWrapper.cs
- FormsAuthenticationModule.cs
- EmptyTextWriter.cs
- RadioButtonRenderer.cs
- CoreSwitches.cs
- OutOfProcStateClientManager.cs
- PropertyMapper.cs
- ComponentResourceManager.cs
- SuppressMergeCheckAttribute.cs
- WebResponse.cs
- XmlSchemaCompilationSettings.cs
- Attributes.cs
- GlobalizationSection.cs
- SQLMoney.cs
- SymbolDocumentInfo.cs
- SByteConverter.cs
- SqlDataSourceCustomCommandPanel.cs
- TextEndOfParagraph.cs
- OrderingQueryOperator.cs
- ZipIOCentralDirectoryFileHeader.cs
- NamespaceTable.cs
- PrimitiveXmlSerializers.cs
- securestring.cs
- FixedSOMElement.cs
- OutputCacheModule.cs
- TransactionState.cs
- DataGridViewBand.cs
- ChangeBlockUndoRecord.cs
- DBNull.cs
- SystemDiagnosticsSection.cs
- assertwrapper.cs
- TextEndOfSegment.cs
- ArrayTypeMismatchException.cs
- ReadWriteSpinLock.cs
- ManagementOperationWatcher.cs
- ReflectTypeDescriptionProvider.cs
- Rotation3D.cs
- ListViewUpdatedEventArgs.cs
- ZipFileInfoCollection.cs
- AbstractDataSvcMapFileLoader.cs