Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- SafeNativeMethods.cs
- ReferentialConstraint.cs
- ReadOnlyCollectionBase.cs
- SerializableAttribute.cs
- SpellerStatusTable.cs
- ListCollectionView.cs
- XmlUrlResolver.cs
- SystemUnicastIPAddressInformation.cs
- DataGridViewButtonCell.cs
- WindowsTokenRoleProvider.cs
- Transactions.cs
- Closure.cs
- TextServicesPropertyRanges.cs
- DeviceContext2.cs
- X500Name.cs
- StringValidatorAttribute.cs
- JavaScriptString.cs
- DBConcurrencyException.cs
- SoapReflectionImporter.cs
- SqlDataReader.cs
- Speller.cs
- EventLogEntryCollection.cs
- DataGridViewButtonCell.cs
- ZipIOExtraFieldElement.cs
- MetadataCacheItem.cs
- ConfigXmlCDataSection.cs
- StandardCommands.cs
- TextFragmentEngine.cs
- FileDataSourceCache.cs
- SqlAggregateChecker.cs
- OptimizerPatterns.cs
- SystemPens.cs
- SQLBytesStorage.cs
- EditorZoneBase.cs
- InfoCardUIAgent.cs
- cryptoapiTransform.cs
- AttachedPropertyBrowsableAttribute.cs
- IsolatedStorageFileStream.cs
- SEHException.cs
- datacache.cs
- XmlEnumAttribute.cs
- XmlnsDefinitionAttribute.cs
- AsymmetricKeyExchangeDeformatter.cs
- ObjectToIdCache.cs
- DbModificationCommandTree.cs
- DataKey.cs
- MsmqInputSessionChannel.cs
- WebPartDescriptionCollection.cs
- GridViewRowEventArgs.cs
- EventArgs.cs
- ImmutableObjectAttribute.cs
- ResourceLoader.cs
- XmlQueryType.cs
- HttpDictionary.cs
- TimelineCollection.cs
- NumberFormatInfo.cs
- TypeBinaryExpression.cs
- ScrollChrome.cs
- SqlPersonalizationProvider.cs
- GridItemPattern.cs
- LabelEditEvent.cs
- HMACSHA512.cs
- SingleResultAttribute.cs
- SerializerProvider.cs
- StyleTypedPropertyAttribute.cs
- XmlWriterSettings.cs
- MediaElement.cs
- TdsValueSetter.cs
- FixUpCollection.cs
- PointKeyFrameCollection.cs
- newinstructionaction.cs
- ArglessEventHandlerProxy.cs
- base64Transforms.cs
- CompensationHandlingFilter.cs
- MobileControlPersister.cs
- SctClaimDictionary.cs
- Win32PrintDialog.cs
- CodeAttributeArgumentCollection.cs
- sqlmetadatafactory.cs
- DesignerTextViewAdapter.cs
- HandleCollector.cs
- TrustSection.cs
- DispatcherHookEventArgs.cs
- SerializationInfoEnumerator.cs
- EventRouteFactory.cs
- TypeSystem.cs
- RangeValidator.cs
- FunctionMappingTranslator.cs
- DriveInfo.cs
- HtmlInputButton.cs
- XPathPatternBuilder.cs
- ScriptIgnoreAttribute.cs
- DelegateBodyWriter.cs
- HierarchicalDataBoundControlAdapter.cs
- DotAtomReader.cs
- ExtendedTransformFactory.cs
- DesignOnlyAttribute.cs
- AbandonedMutexException.cs
- TextSpanModifier.cs
- Signature.cs