Code:
/ 4.0 / 4.0 / untmp / 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(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
- CmsUtils.cs
- WebPartVerb.cs
- EventData.cs
- TaskHelper.cs
- Trace.cs
- IProducerConsumerCollection.cs
- TextServicesCompartmentEventSink.cs
- XPathExpr.cs
- RawAppCommandInputReport.cs
- ListView.cs
- CustomTypeDescriptor.cs
- RelatedCurrencyManager.cs
- InlineObject.cs
- Floater.cs
- CqlBlock.cs
- HtmlToClrEventProxy.cs
- VisualStyleRenderer.cs
- AmbientValueAttribute.cs
- FrameworkContentElement.cs
- FixedPageStructure.cs
- Random.cs
- CompositeTypefaceMetrics.cs
- ResourceWriter.cs
- SystemThemeKey.cs
- dataprotectionpermission.cs
- PrintDialogDesigner.cs
- ToolStripStatusLabel.cs
- Int64Storage.cs
- EntityUtil.cs
- SynchronizationHandlesCodeDomSerializer.cs
- MouseBinding.cs
- DNS.cs
- Cell.cs
- Terminate.cs
- HttpCookie.cs
- StyleHelper.cs
- IPPacketInformation.cs
- DataControlFieldCell.cs
- ScrollChangedEventArgs.cs
- TextServicesProperty.cs
- XmlDocumentViewSchema.cs
- RC2.cs
- AndCondition.cs
- TabletDeviceInfo.cs
- GeneralTransform2DTo3DTo2D.cs
- Imaging.cs
- HttpContext.cs
- Clock.cs
- UITypeEditor.cs
- PrintDialog.cs
- EmbeddedMailObject.cs
- SpellerStatusTable.cs
- DesignerDataColumn.cs
- UriGenerator.cs
- SystemWebCachingSectionGroup.cs
- CompoundFileReference.cs
- SafeEventLogWriteHandle.cs
- StylusPointProperties.cs
- LocationSectionRecord.cs
- XPathNavigatorReader.cs
- LambdaCompiler.Expressions.cs
- AccessViolationException.cs
- PassportAuthenticationEventArgs.cs
- Int16.cs
- _NestedMultipleAsyncResult.cs
- SecurityPolicySection.cs
- wgx_commands.cs
- TemplateBuilder.cs
- UnsafeNativeMethodsTablet.cs
- HttpsHostedTransportConfiguration.cs
- Utility.cs
- WebControlParameterProxy.cs
- XmlBinaryReader.cs
- DataTableExtensions.cs
- XmlIlVisitor.cs
- SubMenuStyle.cs
- CopyAction.cs
- XmlNullResolver.cs
- DataGridViewColumnCollection.cs
- X509Certificate2.cs
- AliasGenerator.cs
- PagesSection.cs
- SecurityCapabilities.cs
- Frame.cs
- DocumentViewerAutomationPeer.cs
- SessionParameter.cs
- ExtensionQuery.cs
- FixedSOMGroup.cs
- SingleKeyFrameCollection.cs
- DbQueryCommandTree.cs
- MutableAssemblyCacheEntry.cs
- BamlWriter.cs
- Dictionary.cs
- VisualCollection.cs
- TypedDataSourceCodeGenerator.cs
- Size.cs
- LicenseException.cs
- TemplateAction.cs
- XPathSingletonIterator.cs
- UniqueConstraint.cs