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
- ChangePassword.cs
- DataBoundLiteralControl.cs
- Transform.cs
- DataGridViewColumnStateChangedEventArgs.cs
- StaticContext.cs
- QilNode.cs
- ColumnResizeAdorner.cs
- DateTimeOffset.cs
- BitmapEffectInput.cs
- WindowVisualStateTracker.cs
- PriorityItem.cs
- TargetParameterCountException.cs
- StrokeNodeOperations2.cs
- EntityCommandExecutionException.cs
- BinaryCommonClasses.cs
- Authorization.cs
- OpenFileDialog.cs
- FixedTextPointer.cs
- SimpleTextLine.cs
- TextServicesCompartmentContext.cs
- ObjectItemNoOpAssemblyLoader.cs
- SafeCryptHandles.cs
- QueryExtender.cs
- XmlSecureResolver.cs
- DataGridViewRowsRemovedEventArgs.cs
- IdnMapping.cs
- DeviceContext2.cs
- EventArgs.cs
- ToolStripDropDownClosedEventArgs.cs
- EntityDataSourceWrapper.cs
- AdapterSwitches.cs
- FixedSOMPageElement.cs
- RuntimeWrappedException.cs
- ModifierKeysConverter.cs
- XmlSchemaSimpleType.cs
- WrappedDispatcherException.cs
- XXXInfos.cs
- Types.cs
- DesignerCommandAdapter.cs
- StreamInfo.cs
- Vector.cs
- ReflectionUtil.cs
- SecurityRuntime.cs
- GridToolTip.cs
- TreeNodeStyleCollection.cs
- PerfCounterSection.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- TreeNodeCollectionEditor.cs
- Input.cs
- ColorMap.cs
- DataGridViewToolTip.cs
- DesignerLabelAdapter.cs
- RecipientServiceModelSecurityTokenRequirement.cs
- Component.cs
- TypeSystem.cs
- _TimerThread.cs
- PrePrepareMethodAttribute.cs
- SiteMapNode.cs
- ObjectStorage.cs
- WorkflowShape.cs
- AdapterSwitches.cs
- PageThemeParser.cs
- HtmlToClrEventProxy.cs
- CanExecuteRoutedEventArgs.cs
- VerbConverter.cs
- ToggleButtonAutomationPeer.cs
- BrowserCapabilitiesCompiler.cs
- SecurityUtils.cs
- PeerCustomResolverSettings.cs
- LineSegment.cs
- SizeKeyFrameCollection.cs
- _Semaphore.cs
- WinFormsSpinner.cs
- Soap.cs
- WaitHandle.cs
- EmptyCollection.cs
- DataGridCellEditEndingEventArgs.cs
- OdbcConnection.cs
- DataBinding.cs
- InvalidAsynchronousStateException.cs
- ProxyWebPartManager.cs
- RayHitTestParameters.cs
- RangeBase.cs
- ContextMenuAutomationPeer.cs
- KeyConverter.cs
- AssemblyFilter.cs
- PriorityQueue.cs
- RegexCapture.cs
- SQLGuidStorage.cs
- StringSource.cs
- DefaultAsyncDataDispatcher.cs
- HeaderUtility.cs
- SoapSchemaImporter.cs
- LinqToSqlWrapper.cs
- AppDomainAttributes.cs
- InputLanguageCollection.cs
- FlowLayoutPanel.cs
- WindowsButton.cs
- SafeJobHandle.cs
- FlowDocumentPageViewerAutomationPeer.cs