Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / Relationship.cs / 2 / 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
- xamlnodes.cs
- ToolBarButton.cs
- EventProxy.cs
- TableLayoutRowStyleCollection.cs
- StreamWithDictionary.cs
- Tool.cs
- Rotation3DAnimationBase.cs
- BulletedListEventArgs.cs
- CompoundFileStorageReference.cs
- EventToken.cs
- PageRanges.cs
- HyperlinkAutomationPeer.cs
- BaseConfigurationRecord.cs
- PageAdapter.cs
- DesignSurfaceManager.cs
- DateTimeConverter.cs
- IgnoreFlushAndCloseStream.cs
- StylusPointProperties.cs
- ProfileBuildProvider.cs
- UIElementParagraph.cs
- QueryConverter.cs
- OracleRowUpdatedEventArgs.cs
- TransformerInfo.cs
- Image.cs
- Dictionary.cs
- SoapAttributes.cs
- InputReportEventArgs.cs
- BitmapEffectInputData.cs
- ParentQuery.cs
- NoClickablePointException.cs
- MutexSecurity.cs
- GeneralTransform.cs
- XsdDuration.cs
- PersonalizationEntry.cs
- XmlIlTypeHelper.cs
- DefaultBinder.cs
- BezierSegment.cs
- ListViewCommandEventArgs.cs
- RegexGroup.cs
- documentsequencetextpointer.cs
- DataGridViewCellStyle.cs
- XamlReaderConstants.cs
- ServiceProviders.cs
- CardSpacePolicyElement.cs
- QilLoop.cs
- LinqDataSourceStatusEventArgs.cs
- SymbolEqualComparer.cs
- DesignRelation.cs
- HttpHandlersSection.cs
- DataTemplate.cs
- PackagingUtilities.cs
- CodeAttributeArgumentCollection.cs
- DataGridViewEditingControlShowingEventArgs.cs
- DataSourceXmlClassAttribute.cs
- ListViewPagedDataSource.cs
- UdpDiscoveryEndpointElement.cs
- TokenBasedSet.cs
- Configuration.cs
- XhtmlBasicControlAdapter.cs
- HttpCapabilitiesSectionHandler.cs
- Int16.cs
- MimeTypeAttribute.cs
- Pen.cs
- XmlLinkedNode.cs
- DataGridSortingEventArgs.cs
- BaseComponentEditor.cs
- NameTable.cs
- FunctionImportMapping.cs
- xsdvalidator.cs
- GeometryGroup.cs
- StylusShape.cs
- WebHttpDispatchOperationSelector.cs
- IndexedGlyphRun.cs
- XmlSchemaProviderAttribute.cs
- DefaultBindingPropertyAttribute.cs
- RelationshipWrapper.cs
- HtmlInputFile.cs
- CopyNamespacesAction.cs
- Matrix3D.cs
- TextFormatterImp.cs
- XmlAttributes.cs
- PathTooLongException.cs
- BulletDecorator.cs
- ColorConverter.cs
- EntityTransaction.cs
- DataGridLinkButton.cs
- RawTextInputReport.cs
- FixedHyperLink.cs
- SqlFactory.cs
- Section.cs
- RequestStatusBarUpdateEventArgs.cs
- SqlServices.cs
- Preprocessor.cs
- Command.cs
- Literal.cs
- CapiSymmetricAlgorithm.cs
- KnownTypeHelper.cs
- BufferBuilder.cs
- MetadataArtifactLoaderCompositeResource.cs
- MediaContextNotificationWindow.cs