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
- IndexOutOfRangeException.cs
- SingleStorage.cs
- AsyncResult.cs
- Style.cs
- CommonRemoteMemoryBlock.cs
- DBBindings.cs
- InnerItemCollectionView.cs
- StringToken.cs
- OdbcConnectionString.cs
- PenCursorManager.cs
- DropDownList.cs
- ReflectionUtil.cs
- __ComObject.cs
- TypeNameParser.cs
- DataError.cs
- DesignTimeData.cs
- COM2EnumConverter.cs
- CompilationSection.cs
- ZipIOFileItemStream.cs
- APCustomTypeDescriptor.cs
- SecurityToken.cs
- UnsafePeerToPeerMethods.cs
- xmlsaver.cs
- StreamProxy.cs
- WebAdminConfigurationHelper.cs
- OlePropertyStructs.cs
- ModelEditingScope.cs
- CSharpCodeProvider.cs
- PagedDataSource.cs
- OptionUsage.cs
- ScriptIgnoreAttribute.cs
- BigIntegerStorage.cs
- TdsParserSafeHandles.cs
- CodeTypeReferenceCollection.cs
- CompressionTracing.cs
- CacheDependency.cs
- TreeNodeMouseHoverEvent.cs
- ThreadExceptionEvent.cs
- InternalCache.cs
- Utils.cs
- PnrpPermission.cs
- Set.cs
- CaseStatementSlot.cs
- ResourceManager.cs
- DelegateBodyWriter.cs
- FixedSOMLineCollection.cs
- PropertyTabChangedEvent.cs
- JsonUriDataContract.cs
- ObjectSpanRewriter.cs
- ValuePattern.cs
- MenuTracker.cs
- HtmlContainerControl.cs
- DrawingImage.cs
- ConnectionInterfaceCollection.cs
- Selection.cs
- ScrollBar.cs
- DatatypeImplementation.cs
- NetCodeGroup.cs
- FieldToken.cs
- KeyValueSerializer.cs
- HotSpotCollection.cs
- BasicCellRelation.cs
- sqlcontext.cs
- HtmlForm.cs
- TreeSet.cs
- CalendarSelectionChangedEventArgs.cs
- Section.cs
- ToolZone.cs
- RelatedCurrencyManager.cs
- UserValidatedEventArgs.cs
- FontStyleConverter.cs
- BindingCollection.cs
- UseAttributeSetsAction.cs
- LoginCancelEventArgs.cs
- WebPartDescription.cs
- _NTAuthentication.cs
- CommonGetThemePartSize.cs
- CombinedGeometry.cs
- HttpDebugHandler.cs
- ProgressPage.cs
- KoreanLunisolarCalendar.cs
- PropertyPanel.cs
- RemotingConfigParser.cs
- MDIClient.cs
- GetPageNumberCompletedEventArgs.cs
- UpdateProgress.cs
- RenderOptions.cs
- PropertyCondition.cs
- EnumValidator.cs
- HttpAsyncResult.cs
- CompModSwitches.cs
- ExclusiveTcpListener.cs
- ReachPageContentSerializerAsync.cs
- ParserStreamGeometryContext.cs
- VisualState.cs
- Catch.cs
- CoreSwitches.cs
- dsa.cs
- CroppedBitmap.cs
- Column.cs