Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- AllMembershipCondition.cs
- TextProperties.cs
- PropertyItem.cs
- IItemContainerGenerator.cs
- OleDbError.cs
- HttpFileCollection.cs
- EndEvent.cs
- ByteViewer.cs
- CommandExpr.cs
- Item.cs
- LocalValueEnumerator.cs
- WinInetCache.cs
- SmiContextFactory.cs
- WriteTimeStream.cs
- StructuredType.cs
- MetadataArtifactLoaderCompositeFile.cs
- SourceSwitch.cs
- SamlAssertion.cs
- ComboBox.cs
- SrgsElementFactory.cs
- XmlValueConverter.cs
- ExecutionEngineException.cs
- XmlAtomicValue.cs
- PrimaryKeyTypeConverter.cs
- SqlUserDefinedAggregateAttribute.cs
- TableStyle.cs
- CodeGenHelper.cs
- QilStrConcatenator.cs
- SqlBinder.cs
- BrowserTree.cs
- RequestQueryProcessor.cs
- ChineseLunisolarCalendar.cs
- BufferBuilder.cs
- RangeBase.cs
- ToggleButtonAutomationPeer.cs
- CatalogPartChrome.cs
- ProfilePropertyNameValidator.cs
- Relationship.cs
- TemplateControlParser.cs
- InvalidPropValue.cs
- TransformPattern.cs
- ResourceDefaultValueAttribute.cs
- EditableLabelControl.cs
- SqlColumnizer.cs
- Geometry.cs
- ColumnResult.cs
- input.cs
- KeyPressEvent.cs
- MobileTemplatedControlDesigner.cs
- AudienceUriMode.cs
- LogConverter.cs
- TemplateField.cs
- WebPartUserCapability.cs
- ProtocolsSection.cs
- DesignerRegionCollection.cs
- WebPartDescriptionCollection.cs
- webeventbuffer.cs
- baseaxisquery.cs
- LocalizationCodeDomSerializer.cs
- listitem.cs
- BaseAppDomainProtocolHandler.cs
- CanonicalXml.cs
- DictionaryKeyPropertyAttribute.cs
- ScriptIgnoreAttribute.cs
- InvokeMemberBinder.cs
- ConnectionManagementSection.cs
- FunctionImportElement.cs
- TypeConverterAttribute.cs
- CellIdBoolean.cs
- BitArray.cs
- TranslateTransform3D.cs
- SettingsBindableAttribute.cs
- Accessors.cs
- InputScopeConverter.cs
- XmlReturnReader.cs
- Timeline.cs
- ApplicationSecurityManager.cs
- unsafenativemethodstextservices.cs
- DocumentGridPage.cs
- HttpCacheVary.cs
- D3DImage.cs
- HandleCollector.cs
- AppDomainProtocolHandler.cs
- ProxyAttribute.cs
- UnsafeNativeMethods.cs
- AppLevelCompilationSectionCache.cs
- ObjectListItem.cs
- WindowInteractionStateTracker.cs
- UnaryNode.cs
- DerivedKeySecurityToken.cs
- AdapterUtil.cs
- PositiveTimeSpanValidator.cs
- CompilerLocalReference.cs
- datacache.cs
- ComponentResourceKeyConverter.cs
- InternalConfigRoot.cs
- UrlPropertyAttribute.cs
- DateTimeOffset.cs
- AssemblyName.cs
- AsyncResult.cs