Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Metadata / Edm / EntitySet.cs / 1305376 / EntitySet.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.Data.Common.Utils;
using System.Collections.ObjectModel;
namespace System.Data.Metadata.Edm
{
///
/// concrete Class for representing a entity set
///
public class EntitySet : EntitySetBase
{
#region Constructors
///
/// The constructor for constructing the EntitySet with a given name and an entity type
///
/// The name of the EntitySet
/// The db schema
/// The db table
/// The provider specific query that should be used to retrieve the EntitySet
/// The entity type of the entities that this entity set type contains
/// Thrown if the argument name or entityType is null
internal EntitySet(string name, string schema, string table, string definingQuery, EntityType entityType)
: base(name, schema, table, definingQuery, entityType)
{
}
#endregion
#region Fields
private ReadOnlyCollection> _foreignKeyDependents;
private ReadOnlyCollection> _foreignKeyPrincipals;
private volatile bool _hasForeignKeyRelationships;
private volatile bool _hasIndependentRelationships;
#endregion
#region Properties
///
/// Returns the kind of the type
///
public override BuiltInTypeKind BuiltInTypeKind { get { return BuiltInTypeKind.EntitySet; } }
///
/// Gets/Sets the entity type of this entity set
///
public new EntityType ElementType
{
get
{
return (EntityType)base.ElementType;
}
}
///
/// Returns the associations and constraints where "this" EntitySet particpates as the Principal end.
/// From the results of this list, you can retrieve the Dependent IRelatedEnds
///
internal ReadOnlyCollection> ForeignKeyDependents
{
get
{
if (_foreignKeyDependents == null)
{
InitializeForeignKeyLists();
}
return _foreignKeyDependents;
}
}
///
/// Returns the associations and constraints where "this" EntitySet particpates as the Dependent end.
/// From the results of this list, you can retrieve the Principal IRelatedEnds
///
internal ReadOnlyCollection> ForeignKeyPrincipals
{
get
{
if (_foreignKeyPrincipals == null)
{
InitializeForeignKeyLists();
}
return _foreignKeyPrincipals;
}
}
///
/// True if this entity set participates in any foreign key relationships, otherwise false.
///
internal bool HasForeignKeyRelationships
{
get
{
if (_foreignKeyPrincipals == null)
{
InitializeForeignKeyLists();
}
return _hasForeignKeyRelationships;
}
}
///
/// True if this entity set participates in any independent relationships, otherwise false.
///
internal bool HasIndependentRelationships
{
get
{
if (_foreignKeyPrincipals == null)
{
InitializeForeignKeyLists();
}
return _hasIndependentRelationships;
}
}
#endregion
#region Methods
private void InitializeForeignKeyLists()
{
var dependents = new List>();
var principals = new List>();
bool foundFkRelationship = false;
bool foundIndependentRelationship = false;
foreach (AssociationSet associationSet in MetadataHelper.GetAssociationsForEntitySet(this))
{
if (associationSet.ElementType.IsForeignKey)
{
foundFkRelationship = true;
Debug.Assert(associationSet.ElementType.ReferentialConstraints.Count == 1, "Expected exactly one constraint for FK");
ReferentialConstraint constraint = associationSet.ElementType.ReferentialConstraints[0];
if (constraint.ToRole.GetEntityType().IsAssignableFrom(this.ElementType) ||
this.ElementType.IsAssignableFrom(constraint.ToRole.GetEntityType()))
{
// Dependents
dependents.Add(new Tuple(associationSet, constraint));
}
if (constraint.FromRole.GetEntityType().IsAssignableFrom(this.ElementType) ||
this.ElementType.IsAssignableFrom(constraint.FromRole.GetEntityType()))
{
// Principals
principals.Add(new Tuple(associationSet, constraint));
}
}
else
{
foundIndependentRelationship = true;
}
}
_hasForeignKeyRelationships = foundFkRelationship;
_hasIndependentRelationships = foundIndependentRelationship;
var readOnlyDependents = dependents.AsReadOnly();
var readOnlyPrincipals = principals.AsReadOnly();
Interlocked.CompareExchange(ref _foreignKeyDependents, readOnlyDependents, null);
Interlocked.CompareExchange(ref _foreignKeyPrincipals, readOnlyPrincipals, null);
}
#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
- PinnedBufferMemoryStream.cs
- BitVector32.cs
- ImmutablePropertyDescriptorGridEntry.cs
- ScrollBar.cs
- SplashScreen.cs
- SafeBitVector32.cs
- Coordinator.cs
- SyntaxCheck.cs
- CurrentChangedEventManager.cs
- IItemProperties.cs
- PenCursorManager.cs
- TreeNode.cs
- SyntaxCheck.cs
- ContentDesigner.cs
- MediaContextNotificationWindow.cs
- WindowsComboBox.cs
- BindingSource.cs
- AudioLevelUpdatedEventArgs.cs
- SkewTransform.cs
- ExpressionLexer.cs
- SchemaObjectWriter.cs
- StdValidatorsAndConverters.cs
- ListViewDeletedEventArgs.cs
- HttpListenerResponse.cs
- SerializerProvider.cs
- TdsParser.cs
- KnownBoxes.cs
- DictionaryBase.cs
- PostBackTrigger.cs
- ProfileParameter.cs
- BookmarkEventArgs.cs
- JsonFormatReaderGenerator.cs
- Visual3D.cs
- ToolStripContainerActionList.cs
- HttpProfileBase.cs
- Console.cs
- PenCursorManager.cs
- CheckBoxFlatAdapter.cs
- FileReader.cs
- CellIdBoolean.cs
- ImageSource.cs
- ServiceNameCollection.cs
- DataViewManagerListItemTypeDescriptor.cs
- ConfigurationValues.cs
- SetStoryboardSpeedRatio.cs
- AsyncOperationManager.cs
- TextDecoration.cs
- StorageInfo.cs
- XamlSerializer.cs
- StreamReader.cs
- List.cs
- InstallerTypeAttribute.cs
- RootAction.cs
- ClientSession.cs
- SystemBrushes.cs
- NamedPipeProcessProtocolHandler.cs
- MimeObjectFactory.cs
- LocalizationCodeDomSerializer.cs
- ParameterCollection.cs
- SuppressMergeCheckAttribute.cs
- EventBuilder.cs
- OpenTypeLayoutCache.cs
- DoWorkEventArgs.cs
- CreateParams.cs
- EventMappingSettings.cs
- PersonalizationProviderHelper.cs
- JournalEntryListConverter.cs
- SendMailErrorEventArgs.cs
- TabControl.cs
- XmlAttribute.cs
- ObjectCloneHelper.cs
- FixedSOMFixedBlock.cs
- CriticalFinalizerObject.cs
- WebOperationContext.cs
- SqlProvider.cs
- CacheDependency.cs
- IdnElement.cs
- NullableFloatMinMaxAggregationOperator.cs
- StreamWithDictionary.cs
- DataGridViewComponentPropertyGridSite.cs
- ServiceDescriptionSerializer.cs
- UnmanagedBitmapWrapper.cs
- RequestSecurityTokenSerializer.cs
- SafeArrayTypeMismatchException.cs
- UIPermission.cs
- TextTreeRootNode.cs
- ComEventsHelper.cs
- OracleConnection.cs
- StylusButtonCollection.cs
- EntityDataSourceDesigner.cs
- CodeDefaultValueExpression.cs
- KeyValueConfigurationCollection.cs
- WebConvert.cs
- HwndSource.cs
- SendMailErrorEventArgs.cs
- DocumentAutomationPeer.cs
- SafeTokenHandle.cs
- BrowserCapabilitiesCodeGenerator.cs
- BufferBuilder.cs
- PartialList.cs