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(IEnumerable keyFields) {
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(IEnumerable keyFields) {
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
- BlobPersonalizationState.cs
- SpellerStatusTable.cs
- bidPrivateBase.cs
- RowToParametersTransformer.cs
- FakeModelItemImpl.cs
- QueryAccessibilityHelpEvent.cs
- DiscoveryClientOutputChannel.cs
- base64Transforms.cs
- Point.cs
- PolyQuadraticBezierSegment.cs
- SourceInterpreter.cs
- TextRangeEditTables.cs
- HttpModule.cs
- InitializeCorrelation.cs
- FixedSOMTableCell.cs
- BaseParagraph.cs
- TraceXPathNavigator.cs
- TreeViewImageKeyConverter.cs
- SafeLocalAllocation.cs
- SplitterEvent.cs
- ScriptModule.cs
- UserPersonalizationStateInfo.cs
- SharedConnectionWorkflowTransactionService.cs
- AssemblyCollection.cs
- Point3DValueSerializer.cs
- DataKeyCollection.cs
- MenuItem.cs
- SelectionRange.cs
- WinInet.cs
- ResourceManager.cs
- SmtpAuthenticationManager.cs
- PriorityRange.cs
- TraceListener.cs
- MetadataStore.cs
- PolicyLevel.cs
- ResizeBehavior.cs
- TextTreeNode.cs
- Stackframe.cs
- DesignRelation.cs
- WindowsHyperlink.cs
- WebBrowserSiteBase.cs
- MemoryPressure.cs
- BitmapMetadataBlob.cs
- DeferrableContentConverter.cs
- VectorCollection.cs
- PartitionerQueryOperator.cs
- ListView.cs
- BitmapMetadataEnumerator.cs
- StylusPlugInCollection.cs
- MaxValueConverter.cs
- NavigationProperty.cs
- X509Chain.cs
- ArraySortHelper.cs
- DataGridViewComboBoxCell.cs
- SelectionItemPattern.cs
- DataGridDesigner.cs
- ScriptServiceAttribute.cs
- CodeVariableReferenceExpression.cs
- CngAlgorithm.cs
- InitializerFacet.cs
- SafeEventLogReadHandle.cs
- RemoteWebConfigurationHostServer.cs
- SchemaDeclBase.cs
- SqlUserDefinedTypeAttribute.cs
- Repeater.cs
- QilValidationVisitor.cs
- _HTTPDateParse.cs
- RegexNode.cs
- KnownTypesProvider.cs
- XmlWriterSettings.cs
- Win32Native.cs
- Matrix3DStack.cs
- TextTreeRootTextBlock.cs
- Graphics.cs
- ChangePasswordDesigner.cs
- ClosableStream.cs
- TextRangeAdaptor.cs
- LogFlushAsyncResult.cs
- ModelPerspective.cs
- ColumnMapProcessor.cs
- ExpressionBuilder.cs
- ManagementClass.cs
- Transform.cs
- AuthenticationManager.cs
- SafeHandle.cs
- TextPointer.cs
- AuthenticatedStream.cs
- hresults.cs
- SocketConnection.cs
- relpropertyhelper.cs
- EdmFunctionAttribute.cs
- ClientScriptItemCollection.cs
- EventLogInternal.cs
- PaginationProgressEventArgs.cs
- DataService.cs
- GPStream.cs
- UserControl.cs
- ExpandableObjectConverter.cs
- SimpleFieldTemplateFactory.cs
- FrameworkElementFactoryMarkupObject.cs