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
- GeometryModel3D.cs
- State.cs
- xmlglyphRunInfo.cs
- HtmlInputHidden.cs
- QilList.cs
- Splitter.cs
- XmlUnspecifiedAttribute.cs
- RichTextBoxConstants.cs
- DbConnectionInternal.cs
- ElementHostPropertyMap.cs
- MergeExecutor.cs
- XmlNodeComparer.cs
- HoistedLocals.cs
- DurableInstanceContextProvider.cs
- ToolBarPanel.cs
- TrackBarDesigner.cs
- SortExpressionBuilder.cs
- ChtmlTextBoxAdapter.cs
- ScriptReference.cs
- RemotingServices.cs
- PartitionedStream.cs
- CodeSnippetStatement.cs
- FixedPageProcessor.cs
- ButtonStandardAdapter.cs
- ExtensibleClassFactory.cs
- IODescriptionAttribute.cs
- InternalControlCollection.cs
- PauseStoryboard.cs
- HtmlToClrEventProxy.cs
- BitmapFrameEncode.cs
- QuadraticBezierSegment.cs
- GlyphingCache.cs
- ClrPerspective.cs
- StringValidatorAttribute.cs
- ResourceReferenceExpression.cs
- RedBlackList.cs
- ThicknessKeyFrameCollection.cs
- EditorPart.cs
- ScrollItemPatternIdentifiers.cs
- SharedConnectionInfo.cs
- SqlNodeAnnotations.cs
- EnterpriseServicesHelper.cs
- MediaCommands.cs
- UndoManager.cs
- HashSetDebugView.cs
- TableStyle.cs
- MetafileEditor.cs
- EmptyStringExpandableObjectConverter.cs
- FilterQuery.cs
- ISessionStateStore.cs
- ImageBrush.cs
- XmlEncodedRawTextWriter.cs
- UnsafeNativeMethods.cs
- ObjectDataSourceEventArgs.cs
- WhitespaceRuleLookup.cs
- InternalException.cs
- TrustSection.cs
- CodeGeneratorOptions.cs
- InternalsVisibleToAttribute.cs
- EditorPartDesigner.cs
- EdmItemCollection.OcAssemblyCache.cs
- Int64.cs
- ClientTargetSection.cs
- precedingsibling.cs
- DynamicRouteExpression.cs
- ReadOnlyMetadataCollection.cs
- XmlDomTextWriter.cs
- GroupBoxRenderer.cs
- CodePageUtils.cs
- AttributeAction.cs
- PerformanceCounter.cs
- PeerNeighborManager.cs
- EllipseGeometry.cs
- xml.cs
- SimpleBitVector32.cs
- SynchronizationHandlesCodeDomSerializer.cs
- XPathNodePointer.cs
- SystemColorTracker.cs
- WindowsStartMenu.cs
- RegistryPermission.cs
- InputLangChangeRequestEvent.cs
- Int16Converter.cs
- TypeUsage.cs
- ExponentialEase.cs
- JsonFormatWriterGenerator.cs
- MailWebEventProvider.cs
- HashHelper.cs
- ModuleBuilderData.cs
- BatchParser.cs
- CryptoApi.cs
- LinkClickEvent.cs
- AddInToken.cs
- CompensationHandlingFilter.cs
- EntityClassGenerator.cs
- BinaryNode.cs
- NameValueConfigurationElement.cs
- RightsManagementPermission.cs
- StringInfo.cs
- PackagePart.cs
- PhysicalFontFamily.cs