Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / Relationship.cs / 3 / Relationship.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Data.Objects.DataClasses;
using System.Collections.Generic;
using System.Diagnostics;
using System.Xml;
using System.Data;
using System.Data.Metadata.Edm;
namespace System.Data.EntityModel.SchemaObjectModel
{
///
/// Represents an Association element
///
internal sealed class Relationship : SchemaType, IRelationship
{
private RelationshipKind _relationshipKind;
RelationshipEndCollection _ends;
private List _constraints;
///
/// Construct a Relationship object
///
/// the parent
/// the kind of relationship
public Relationship(Schema parent, RelationshipKind kind)
: base(parent)
{
RelationshipKind = kind;
}
///
/// List of Ends defined for this Association
///
public IList Ends
{
get
{
if ( _ends == null )
_ends = new RelationshipEndCollection();
return _ends;
}
}
///
/// Returns the list of constraints on this relation
///
public IList Constraints
{
get
{
if (_constraints == null)
{
_constraints = new List();
}
return _constraints;
}
}
public bool TryGetEnd( string roleName, out IRelationshipEnd end )
{
return _ends.TryGetEnd( roleName, out end );
}
///
/// Is this an Association
///
public RelationshipKind RelationshipKind
{
get
{
return _relationshipKind;
}
private set
{
_relationshipKind = value;
}
}
///
/// do whole element validation
///
///
internal override void Validate()
{
base.Validate();
bool foundOperations = false;
foreach ( RelationshipEnd end in Ends )
{
end.Validate();
if ( RelationshipKind == RelationshipKind.Association )
{
if ( end.Operations.Count > 0 )
{
if ( foundOperations )
end.AddError( ErrorCode.InvalidOperation, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InvalidOperationMultipleEndsInAssociation);
foundOperations = true;
}
}
}
if (Constraints.Count == 0 &&
this.Schema.DataModel == SchemaDataModelOption.ProviderDataModel)
{
AddError(ErrorCode.MissingConstraintOnRelationshipType,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.MissingConstraintOnRelationshipType(FQName));
}
else
{
foreach (ReferentialConstraint constraint in Constraints)
{
constraint.Validate();
}
}
}
///
/// do whole element resolution
///
internal override void ResolveTopLevelNames()
{
base.ResolveTopLevelNames();
foreach ( RelationshipEnd end in Ends )
end.ResolveTopLevelNames();
foreach (ReferentialConstraint referentialConstraint in Constraints)
{
referentialConstraint.ResolveTopLevelNames();
}
}
protected override bool HandleElement(XmlReader reader)
{
if (base.HandleElement(reader))
{
return true;
}
else if (CanHandleElement(reader, XmlConstants.End))
{
HandleEndElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.ReferentialConstraint))
{
HandleConstraintElement(reader);
return true;
}
return false;
}
///
/// handle the End child element
///
/// XmlReader positioned at the end element
private void HandleEndElement(XmlReader reader)
{
Debug.Assert(reader != null);
RelationshipEnd end = new RelationshipEnd(this);
end.Parse(reader);
if (Ends.Count == 2)
{
AddError( ErrorCode.InvalidAssociation, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.TooManyAssociationEnds(FQName ) );
return;
}
Ends.Add(end);
}
///
/// handle the constraint element
///
/// XmlReader positioned at the constraint element
private void HandleConstraintElement(XmlReader reader)
{
Debug.Assert(reader != null);
ReferentialConstraint constraint = new ReferentialConstraint(this);
constraint.Parse(reader);
this.Constraints.Add(constraint);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Data.Objects.DataClasses;
using System.Collections.Generic;
using System.Diagnostics;
using System.Xml;
using System.Data;
using System.Data.Metadata.Edm;
namespace System.Data.EntityModel.SchemaObjectModel
{
///
/// Represents an Association element
///
internal sealed class Relationship : SchemaType, IRelationship
{
private RelationshipKind _relationshipKind;
RelationshipEndCollection _ends;
private List _constraints;
///
/// Construct a Relationship object
///
/// the parent
/// the kind of relationship
public Relationship(Schema parent, RelationshipKind kind)
: base(parent)
{
RelationshipKind = kind;
}
///
/// List of Ends defined for this Association
///
public IList Ends
{
get
{
if ( _ends == null )
_ends = new RelationshipEndCollection();
return _ends;
}
}
///
/// Returns the list of constraints on this relation
///
public IList Constraints
{
get
{
if (_constraints == null)
{
_constraints = new List();
}
return _constraints;
}
}
public bool TryGetEnd( string roleName, out IRelationshipEnd end )
{
return _ends.TryGetEnd( roleName, out end );
}
///
/// Is this an Association
///
public RelationshipKind RelationshipKind
{
get
{
return _relationshipKind;
}
private set
{
_relationshipKind = value;
}
}
///
/// do whole element validation
///
///
internal override void Validate()
{
base.Validate();
bool foundOperations = false;
foreach ( RelationshipEnd end in Ends )
{
end.Validate();
if ( RelationshipKind == RelationshipKind.Association )
{
if ( end.Operations.Count > 0 )
{
if ( foundOperations )
end.AddError( ErrorCode.InvalidOperation, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InvalidOperationMultipleEndsInAssociation);
foundOperations = true;
}
}
}
if (Constraints.Count == 0 &&
this.Schema.DataModel == SchemaDataModelOption.ProviderDataModel)
{
AddError(ErrorCode.MissingConstraintOnRelationshipType,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.MissingConstraintOnRelationshipType(FQName));
}
else
{
foreach (ReferentialConstraint constraint in Constraints)
{
constraint.Validate();
}
}
}
///
/// do whole element resolution
///
internal override void ResolveTopLevelNames()
{
base.ResolveTopLevelNames();
foreach ( RelationshipEnd end in Ends )
end.ResolveTopLevelNames();
foreach (ReferentialConstraint referentialConstraint in Constraints)
{
referentialConstraint.ResolveTopLevelNames();
}
}
protected override bool HandleElement(XmlReader reader)
{
if (base.HandleElement(reader))
{
return true;
}
else if (CanHandleElement(reader, XmlConstants.End))
{
HandleEndElement(reader);
return true;
}
else if (CanHandleElement(reader, XmlConstants.ReferentialConstraint))
{
HandleConstraintElement(reader);
return true;
}
return false;
}
///
/// handle the End child element
///
/// XmlReader positioned at the end element
private void HandleEndElement(XmlReader reader)
{
Debug.Assert(reader != null);
RelationshipEnd end = new RelationshipEnd(this);
end.Parse(reader);
if (Ends.Count == 2)
{
AddError( ErrorCode.InvalidAssociation, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.TooManyAssociationEnds(FQName ) );
return;
}
Ends.Add(end);
}
///
/// handle the constraint element
///
/// XmlReader positioned at the constraint element
private void HandleConstraintElement(XmlReader reader)
{
Debug.Assert(reader != null);
ReferentialConstraint constraint = new ReferentialConstraint(this);
constraint.Parse(reader);
this.Constraints.Add(constraint);
}
}
}
// 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
- DatatypeImplementation.cs
- TreeNodeStyleCollection.cs
- SynchronizationHandlesCodeDomSerializer.cs
- ActionMessageFilterTable.cs
- Operator.cs
- StrokeNode.cs
- ModelUIElement3D.cs
- BitmapEffectvisualstate.cs
- DashStyle.cs
- SecurityContext.cs
- ProcessProtocolHandler.cs
- TreeNodeBindingCollection.cs
- SafeProcessHandle.cs
- IdentityManager.cs
- DataGridViewUtilities.cs
- ScaleTransform3D.cs
- ETagAttribute.cs
- SineEase.cs
- ParentUndoUnit.cs
- ServiceSecurityAuditBehavior.cs
- ToolStripArrowRenderEventArgs.cs
- CqlParserHelpers.cs
- InheritanceAttribute.cs
- ControlSerializer.cs
- StorageComplexPropertyMapping.cs
- FileDialogCustomPlace.cs
- CellIdBoolean.cs
- ButtonColumn.cs
- OutputWindow.cs
- WorkflowMarkupSerializerMapping.cs
- DtdParser.cs
- AppDomainCompilerProxy.cs
- DbParameterHelper.cs
- FrameDimension.cs
- HMAC.cs
- ThreadSafeList.cs
- Soap12ProtocolImporter.cs
- SystemWebSectionGroup.cs
- EncoderReplacementFallback.cs
- Opcode.cs
- Frame.cs
- SmtpTransport.cs
- LayoutTable.cs
- SerializableAttribute.cs
- FixedTextView.cs
- Popup.cs
- AnimatedTypeHelpers.cs
- BasicExpressionVisitor.cs
- UrlMappingsModule.cs
- FixedTextContainer.cs
- CollaborationHelperFunctions.cs
- PageBuildProvider.cs
- SparseMemoryStream.cs
- shaperfactoryquerycacheentry.cs
- WindowsAuthenticationModule.cs
- TogglePattern.cs
- DrawItemEvent.cs
- SimpleWebHandlerParser.cs
- FormViewUpdateEventArgs.cs
- XPathAncestorIterator.cs
- PeerTransportListenAddressValidatorAttribute.cs
- ScrollBarAutomationPeer.cs
- ClientSponsor.cs
- _StreamFramer.cs
- OverflowException.cs
- DurableErrorHandler.cs
- BitStream.cs
- Parser.cs
- CollectionDataContract.cs
- TemplatePagerField.cs
- _RequestCacheProtocol.cs
- WrappedIUnknown.cs
- DbConnectionPoolIdentity.cs
- MetadataUtil.cs
- EmptyControlCollection.cs
- SizeAnimation.cs
- GridItemProviderWrapper.cs
- RpcCryptoRequest.cs
- CodeSubDirectoriesCollection.cs
- DrawingServices.cs
- DES.cs
- IOException.cs
- FreezableCollection.cs
- InteropBitmapSource.cs
- webclient.cs
- WebReferenceOptions.cs
- TransformProviderWrapper.cs
- ReferentialConstraint.cs
- DescriptionCreator.cs
- XmlChildNodes.cs
- Rotation3DAnimationUsingKeyFrames.cs
- SoapProtocolImporter.cs
- ServiceNameCollection.cs
- PipeSecurity.cs
- PageBuildProvider.cs
- DetailsViewRowCollection.cs
- EndpointAddress.cs
- WpfXamlMember.cs
- BamlBinaryReader.cs
- MatrixIndependentAnimationStorage.cs