Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / EntityContainerAssociationSet.cs / 3 / EntityContainerAssociationSet.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Xml;
using System.Data;
using System.Data.Objects.DataClasses;
using System.Data.Metadata.Edm;
namespace System.Data.EntityModel.SchemaObjectModel
{
///
/// Represents an AssociationSet element.
///
internal sealed class EntityContainerAssociationSet : EntityContainerRelationshipSet
{
// Note: If you add more fields, please make sure you handle that in the clone method
private Dictionary _relationshipEnds = new Dictionary();
private List _rolelessEnds = new List();
///
/// Constructs an EntityContainerAssociationSet
///
/// Reference to the schema element.
public EntityContainerAssociationSet( EntityContainer parentElement )
: base( parentElement )
{
}
///
/// The ends defined and infered for this AssociationSet
///
internal override IEnumerable Ends
{
get
{
foreach ( EntityContainerAssociationSetEnd end in _relationshipEnds.Values )
{
yield return end;
}
foreach ( EntityContainerAssociationSetEnd end in _rolelessEnds )
{
yield return end;
}
}
}
protected override bool HandleAttribute(XmlReader reader)
{
if (base.HandleAttribute(reader))
{
return true;
}
else if (CanHandleAttribute(reader, XmlConstants.Association))
{
HandleRelationshipTypeNameAttribute(reader);
return true;
}
return false;
}
protected override bool HandleElement(XmlReader reader)
{
if (base.HandleElement(reader))
{
return true;
}
else if (CanHandleElement(reader, XmlConstants.End))
{
HandleEndElement(reader);
return true;
}
return false;
}
///
/// The method that is called when an End element is encountered.
///
/// The XmlReader positioned at the EndElement.
private void HandleEndElement( XmlReader reader )
{
Debug.Assert( reader != null );
EntityContainerAssociationSetEnd end = new EntityContainerAssociationSetEnd( this );
end.Parse( reader );
if ( end.Role == null )
{
// we will resolve the role name later and put it in the
// normal _relationshipEnds dictionary
_rolelessEnds.Add( end );
return;
}
if ( HasEnd( end.Role ) )
{
end.AddError( ErrorCode.InvalidName, EdmSchemaErrorSeverity.Error, reader,
System.Data.Entity.Strings.DuplicateEndName(end.Name ) );
return;
}
_relationshipEnds.Add( end.Role, end );
}
internal override void ResolveTopLevelNames()
{
base.ResolveTopLevelNames();
// this just got resolved
if ( Relationship != null &&
Relationship.RelationshipKind != RelationshipKind.Association )
{
AddError( ErrorCode.BadType,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.AssociationSetInvalidRelationshipKind(FQName ) );
}
}
internal override void ResolveSecondLevelNames()
{
base.ResolveSecondLevelNames();
// the base class should have fixed up the role names on my ends
foreach (EntityContainerAssociationSetEnd end in _rolelessEnds)
{
if (end.Role != null)
{
if (HasEnd(end.Role))
{
end.AddError(ErrorCode.InvalidName, EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InferRelationshipEndGivesAlreadyDefinedEnd(end.EntitySet.FQName, Name));
}
else
{
_relationshipEnds.Add(end.Role, end);
}
}
// any that didn't get resolved will already have errors entered
}
_rolelessEnds.Clear();
}
///
/// Create and add a EntityContainerEnd from the IRelationshipEnd provided
///
/// The relationship end of the end to add.
/// The entitySet to associate with the relationship end.
protected override void AddEnd( IRelationshipEnd relationshipEnd, EntityContainerEntitySet entitySet )
{
Debug.Assert( relationshipEnd != null );
Debug.Assert( !_relationshipEnds.ContainsKey( relationshipEnd.Name ) );
// we expect set to be null sometimes
EntityContainerAssociationSetEnd end = new EntityContainerAssociationSetEnd( this );
end.Role = relationshipEnd.Name;
end.RelationshipEnd = relationshipEnd;
end.EntitySet = entitySet;
if ( end.EntitySet != null )
{
_relationshipEnds.Add( end.Role, end );
}
}
protected override bool HasEnd( string role )
{
return _relationshipEnds.ContainsKey( role );
}
internal override SchemaElement Clone(SchemaElement parentElement)
{
EntityContainerAssociationSet associationSet = new EntityContainerAssociationSet((EntityContainer)parentElement);
associationSet.Name = this.Name;
associationSet.Relationship = this.Relationship;
foreach (EntityContainerAssociationSetEnd end in this.Ends)
{
EntityContainerAssociationSetEnd clonedEnd = (EntityContainerAssociationSetEnd)end.Clone(associationSet);
associationSet._relationshipEnds.Add(clonedEnd.Role, clonedEnd);
}
return associationSet;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Xml;
using System.Data;
using System.Data.Objects.DataClasses;
using System.Data.Metadata.Edm;
namespace System.Data.EntityModel.SchemaObjectModel
{
///
/// Represents an AssociationSet element.
///
internal sealed class EntityContainerAssociationSet : EntityContainerRelationshipSet
{
// Note: If you add more fields, please make sure you handle that in the clone method
private Dictionary _relationshipEnds = new Dictionary();
private List _rolelessEnds = new List();
///
/// Constructs an EntityContainerAssociationSet
///
/// Reference to the schema element.
public EntityContainerAssociationSet( EntityContainer parentElement )
: base( parentElement )
{
}
///
/// The ends defined and infered for this AssociationSet
///
internal override IEnumerable Ends
{
get
{
foreach ( EntityContainerAssociationSetEnd end in _relationshipEnds.Values )
{
yield return end;
}
foreach ( EntityContainerAssociationSetEnd end in _rolelessEnds )
{
yield return end;
}
}
}
protected override bool HandleAttribute(XmlReader reader)
{
if (base.HandleAttribute(reader))
{
return true;
}
else if (CanHandleAttribute(reader, XmlConstants.Association))
{
HandleRelationshipTypeNameAttribute(reader);
return true;
}
return false;
}
protected override bool HandleElement(XmlReader reader)
{
if (base.HandleElement(reader))
{
return true;
}
else if (CanHandleElement(reader, XmlConstants.End))
{
HandleEndElement(reader);
return true;
}
return false;
}
///
/// The method that is called when an End element is encountered.
///
/// The XmlReader positioned at the EndElement.
private void HandleEndElement( XmlReader reader )
{
Debug.Assert( reader != null );
EntityContainerAssociationSetEnd end = new EntityContainerAssociationSetEnd( this );
end.Parse( reader );
if ( end.Role == null )
{
// we will resolve the role name later and put it in the
// normal _relationshipEnds dictionary
_rolelessEnds.Add( end );
return;
}
if ( HasEnd( end.Role ) )
{
end.AddError( ErrorCode.InvalidName, EdmSchemaErrorSeverity.Error, reader,
System.Data.Entity.Strings.DuplicateEndName(end.Name ) );
return;
}
_relationshipEnds.Add( end.Role, end );
}
internal override void ResolveTopLevelNames()
{
base.ResolveTopLevelNames();
// this just got resolved
if ( Relationship != null &&
Relationship.RelationshipKind != RelationshipKind.Association )
{
AddError( ErrorCode.BadType,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.AssociationSetInvalidRelationshipKind(FQName ) );
}
}
internal override void ResolveSecondLevelNames()
{
base.ResolveSecondLevelNames();
// the base class should have fixed up the role names on my ends
foreach (EntityContainerAssociationSetEnd end in _rolelessEnds)
{
if (end.Role != null)
{
if (HasEnd(end.Role))
{
end.AddError(ErrorCode.InvalidName, EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InferRelationshipEndGivesAlreadyDefinedEnd(end.EntitySet.FQName, Name));
}
else
{
_relationshipEnds.Add(end.Role, end);
}
}
// any that didn't get resolved will already have errors entered
}
_rolelessEnds.Clear();
}
///
/// Create and add a EntityContainerEnd from the IRelationshipEnd provided
///
/// The relationship end of the end to add.
/// The entitySet to associate with the relationship end.
protected override void AddEnd( IRelationshipEnd relationshipEnd, EntityContainerEntitySet entitySet )
{
Debug.Assert( relationshipEnd != null );
Debug.Assert( !_relationshipEnds.ContainsKey( relationshipEnd.Name ) );
// we expect set to be null sometimes
EntityContainerAssociationSetEnd end = new EntityContainerAssociationSetEnd( this );
end.Role = relationshipEnd.Name;
end.RelationshipEnd = relationshipEnd;
end.EntitySet = entitySet;
if ( end.EntitySet != null )
{
_relationshipEnds.Add( end.Role, end );
}
}
protected override bool HasEnd( string role )
{
return _relationshipEnds.ContainsKey( role );
}
internal override SchemaElement Clone(SchemaElement parentElement)
{
EntityContainerAssociationSet associationSet = new EntityContainerAssociationSet((EntityContainer)parentElement);
associationSet.Name = this.Name;
associationSet.Relationship = this.Relationship;
foreach (EntityContainerAssociationSetEnd end in this.Ends)
{
EntityContainerAssociationSetEnd clonedEnd = (EntityContainerAssociationSetEnd)end.Clone(associationSet);
associationSet._relationshipEnds.Add(clonedEnd.Role, clonedEnd);
}
return associationSet;
}
}
}
// 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
- BrowserCapabilitiesFactory.cs
- ObjectQuery.cs
- CompareValidator.cs
- XamlToRtfWriter.cs
- ToolStripContainer.cs
- Utils.cs
- FontWeightConverter.cs
- XmlException.cs
- CookieProtection.cs
- XmlSchemaExternal.cs
- GridEntryCollection.cs
- BaseDataList.cs
- securestring.cs
- JsonEnumDataContract.cs
- TablePattern.cs
- SchemaElement.cs
- ZipIOLocalFileBlock.cs
- EventOpcode.cs
- SpeechAudioFormatInfo.cs
- BinaryCommonClasses.cs
- TransactionScopeDesigner.cs
- XpsManager.cs
- TextTreeObjectNode.cs
- XamlRtfConverter.cs
- X500Name.cs
- ToolStripPanel.cs
- BatchParser.cs
- DiffuseMaterial.cs
- MenuEventArgs.cs
- OutputScope.cs
- ConfigurationSection.cs
- SQLBytesStorage.cs
- PolyBezierSegment.cs
- QuaternionAnimationUsingKeyFrames.cs
- NamespaceCollection.cs
- PolyBezierSegmentFigureLogic.cs
- SiteMembershipCondition.cs
- SingleTagSectionHandler.cs
- XslTransform.cs
- Mapping.cs
- VirtualPathExtension.cs
- FilePresentation.cs
- GZipDecoder.cs
- EasingQuaternionKeyFrame.cs
- XmlSiteMapProvider.cs
- PrintPageEvent.cs
- EntityContainer.cs
- ServiceOperationUIEditor.cs
- CannotUnloadAppDomainException.cs
- MediaContextNotificationWindow.cs
- DropShadowEffect.cs
- ConditionChanges.cs
- TextBoxRenderer.cs
- HitTestWithGeometryDrawingContextWalker.cs
- ButtonBaseAutomationPeer.cs
- RequestQueue.cs
- PropertyCollection.cs
- SqlXml.cs
- ResourceManagerWrapper.cs
- HtmlElement.cs
- WebHttpEndpoint.cs
- PlaceHolder.cs
- ItemChangedEventArgs.cs
- BindingList.cs
- QilName.cs
- WindowsScrollBarBits.cs
- GroupStyle.cs
- ObjectSet.cs
- ListManagerBindingsCollection.cs
- FieldValue.cs
- FileAuthorizationModule.cs
- BaseUriHelper.cs
- StrokeCollection2.cs
- EmbeddedMailObjectsCollection.cs
- FreezableOperations.cs
- VisualStyleRenderer.cs
- BamlMapTable.cs
- GPPOINT.cs
- FixedSOMPageConstructor.cs
- DeadCharTextComposition.cs
- TypeInitializationException.cs
- QuadraticBezierSegment.cs
- VarRemapper.cs
- LineSegment.cs
- MapPathBasedVirtualPathProvider.cs
- BitmapInitialize.cs
- DBConcurrencyException.cs
- SyndicationContent.cs
- UriParserTemplates.cs
- _NetworkingPerfCounters.cs
- QuadTree.cs
- WhitespaceRuleLookup.cs
- NetStream.cs
- SettingsPropertyWrongTypeException.cs
- StaticTextPointer.cs
- SvcMapFileSerializer.cs
- AnimationClock.cs
- HtmlForm.cs
- PostBackOptions.cs
- linebase.cs