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
- AdapterUtil.cs
- DefaultProxySection.cs
- ToolBar.cs
- XmlReflectionImporter.cs
- parserscommon.cs
- HtmlWindow.cs
- MetadataPropertyvalue.cs
- PtsContext.cs
- RadialGradientBrush.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- ContentPosition.cs
- Utils.cs
- StylusDevice.cs
- LinearKeyFrames.cs
- Latin1Encoding.cs
- EnumerableRowCollection.cs
- PenThread.cs
- EventProperty.cs
- CustomAttributeBuilder.cs
- WindowsListViewItemCheckBox.cs
- ResumeStoryboard.cs
- StateItem.cs
- HtmlInputCheckBox.cs
- SqlUserDefinedAggregateAttribute.cs
- DbParameterHelper.cs
- DataGridViewRowPrePaintEventArgs.cs
- ResourceAssociationSet.cs
- SafeNativeMethodsCLR.cs
- ToolCreatedEventArgs.cs
- FormViewDeletedEventArgs.cs
- TemplateField.cs
- DispatcherExceptionEventArgs.cs
- WebControlParameterProxy.cs
- XDeferredAxisSource.cs
- COAUTHIDENTITY.cs
- NullableIntMinMaxAggregationOperator.cs
- FacetEnabledSchemaElement.cs
- ScriptDescriptor.cs
- UriTemplatePathPartiallyEquivalentSet.cs
- WebPartConnectionsConnectVerb.cs
- RawStylusSystemGestureInputReport.cs
- StorageMappingItemLoader.cs
- HttpUnhandledOperationInvoker.cs
- DataGridViewLinkCell.cs
- EntityConnection.cs
- SizeKeyFrameCollection.cs
- EnterpriseServicesHelper.cs
- ZeroOpNode.cs
- DispatcherBuilder.cs
- IntSecurity.cs
- Debugger.cs
- FileSystemInfo.cs
- DrawingGroup.cs
- XmlQuerySequence.cs
- ToolStripContentPanelRenderEventArgs.cs
- SmtpCommands.cs
- WinInet.cs
- SqlDependencyListener.cs
- MimeObjectFactory.cs
- StackBuilderSink.cs
- IndexOutOfRangeException.cs
- DependsOnAttribute.cs
- DefaultAssemblyResolver.cs
- Material.cs
- PolicyDesigner.cs
- RadioButton.cs
- WriteableBitmap.cs
- AmbientLight.cs
- StandardCommands.cs
- CallTemplateAction.cs
- SaveLedgerEntryRequest.cs
- ProcessHostMapPath.cs
- GetIndexBinder.cs
- PipeSecurity.cs
- FixedTextSelectionProcessor.cs
- InvokeWebServiceDesigner.cs
- EventDescriptorCollection.cs
- TableLayoutRowStyleCollection.cs
- RelationshipEnd.cs
- ExpressionBuilder.cs
- XmlWriterSettings.cs
- EntitySetBase.cs
- TransformGroup.cs
- Psha1DerivedKeyGenerator.cs
- DelegateHelpers.Generated.cs
- _FtpDataStream.cs
- XmlSchemaAttributeGroupRef.cs
- ProcessModuleCollection.cs
- StreamWriter.cs
- DesignerMetadata.cs
- CachedTypeface.cs
- BufferCache.cs
- TrackBarRenderer.cs
- ToolStripSeparator.cs
- XmlLanguageConverter.cs
- CodeTypeMember.cs
- VirtualPathUtility.cs
- Visual3D.cs
- ProxyGenerator.cs
- PageThemeParser.cs