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
- FullTextBreakpoint.cs
- ProgressBarHighlightConverter.cs
- BitmapEffect.cs
- URIFormatException.cs
- ComNativeDescriptor.cs
- OneWayElement.cs
- AssertSection.cs
- UpdateCompiler.cs
- Stack.cs
- RawStylusInput.cs
- IntSecurity.cs
- SqlStatistics.cs
- SslStream.cs
- AddInProcess.cs
- WeakReferenceKey.cs
- WebContentFormatHelper.cs
- ErrorFormatterPage.cs
- RegexStringValidatorAttribute.cs
- CrossAppDomainChannel.cs
- SymbolDocumentInfo.cs
- EndpointFilterProvider.cs
- ProtocolViolationException.cs
- StorageInfo.cs
- UpdatePanelTriggerCollection.cs
- GeneratedView.cs
- PageCache.cs
- StartUpEventArgs.cs
- MediaContextNotificationWindow.cs
- PathTooLongException.cs
- ObjectIDGenerator.cs
- MeasurementDCInfo.cs
- DataGridViewTextBoxEditingControl.cs
- log.cs
- BmpBitmapEncoder.cs
- LambdaCompiler.ControlFlow.cs
- GlyphRunDrawing.cs
- WindowsTooltip.cs
- SubstitutionList.cs
- PhoneCallDesigner.cs
- SyntaxCheck.cs
- RectIndependentAnimationStorage.cs
- TextModifier.cs
- MissingFieldException.cs
- IsolatedStorageException.cs
- FixedFindEngine.cs
- Queue.cs
- XmlSchemaProviderAttribute.cs
- BypassElementCollection.cs
- GraphicsContainer.cs
- XmlSchemaInfo.cs
- RowUpdatingEventArgs.cs
- BufferCache.cs
- Image.cs
- MembershipUser.cs
- SchemaMapping.cs
- IEnumerable.cs
- HexParser.cs
- DataRowChangeEvent.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- dtdvalidator.cs
- DispatcherExceptionEventArgs.cs
- Util.cs
- MetadataSerializer.cs
- CompressedStack.cs
- AsymmetricSignatureFormatter.cs
- HandlerMappingMemo.cs
- RuntimeHandles.cs
- HtmlControl.cs
- XmlSchemaElement.cs
- ProfileSection.cs
- Metafile.cs
- DataMember.cs
- ADMembershipUser.cs
- X509Certificate2.cs
- ListViewHitTestInfo.cs
- TextModifierScope.cs
- CroppedBitmap.cs
- InheritablePropertyChangeInfo.cs
- DataGridState.cs
- AutomationEventArgs.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- ScaleTransform.cs
- StackSpiller.Temps.cs
- EdmConstants.cs
- OdbcDataAdapter.cs
- DES.cs
- MimeBasePart.cs
- webclient.cs
- ScriptControl.cs
- EndpointAddressAugust2004.cs
- BCLDebug.cs
- GestureRecognitionResult.cs
- Vector.cs
- PeerContact.cs
- XmlReflectionMember.cs
- CompilerError.cs
- MultipleFilterMatchesException.cs
- DataColumnMappingCollection.cs
- HiddenField.cs
- OdbcInfoMessageEvent.cs