Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / ReferentialConstraintRoleElement.cs / 1305376 / ReferentialConstraintRoleElement.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.Metadata.Edm;
namespace System.Data.EntityModel.SchemaObjectModel
{
///
/// Represents an role element in referential constraint element.
///
internal sealed class ReferentialConstraintRoleElement : SchemaElement
{
private List _roleProperties;
private IRelationshipEnd _end;
///
/// Constructs an EntityContainerAssociationSetEnd
///
/// Reference to the schema element.
public ReferentialConstraintRoleElement(ReferentialConstraint parentElement)
: base( parentElement )
{
}
public IList RoleProperties
{
get
{
if (_roleProperties == null)
{
_roleProperties = new List();
}
return _roleProperties;
}
}
public IRelationshipEnd End
{
get
{
return _end;
}
}
protected override bool HandleElement(XmlReader reader)
{
if (base.HandleElement(reader))
{
return true;
}
else if (CanHandleElement(reader, XmlConstants.PropertyRef))
{
HandlePropertyRefElement(reader);
return true;
}
return false;
}
protected override bool HandleAttribute(XmlReader reader)
{
if (CanHandleAttribute(reader, XmlConstants.Role))
{
HandleRoleAttribute(reader);
return true;
}
return false;
}
///
///
///
///
private void HandlePropertyRefElement(XmlReader reader)
{
PropertyRefElement property = new PropertyRefElement(ParentElement);
property.Parse(reader);
this.RoleProperties.Add(property);
}
private void HandleRoleAttribute(XmlReader reader)
{
string roleName;
Utils.GetString(Schema, reader, out roleName);
this.Name = roleName;
}
///
/// Used during the resolve phase to resolve the type name to the object that represents that type
///
internal override void ResolveTopLevelNames()
{
Debug.Assert(!String.IsNullOrEmpty(this.Name), "RoleName should never be empty");
IRelationship relationship = (IRelationship)this.ParentElement.ParentElement;
if (!relationship.TryGetEnd(this.Name, out _end))
{
AddError(ErrorCode.InvalidRoleInRelationshipConstraint,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InvalidEndRoleInRelationshipConstraint(this.Name, relationship.Name));
return;
}
// we are gauranteed that the _end has gone through ResolveNames, but
// we are not gauranteed that it was successful
if (_end.Type == null)
{
// an error has already been added for this
return;
}
}
internal override void Validate()
{
base.Validate();
// we can't resolve these names until validate because they will reference properties and types
// that may not be resolved when this objects ResolveNames gets called
Debug.Assert(_roleProperties != null, "xsd should have verified that there should be atleast one property ref element in referential role element");
foreach (PropertyRefElement property in _roleProperties)
{
if (!property.ResolveNames((SchemaEntityType)_end.Type))
{
AddError(ErrorCode.InvalidPropertyInRelationshipConstraint,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InvalidPropertyInRelationshipConstraint(
property.Name,
this.Name));
}
}
}
}
}
// 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.Metadata.Edm;
namespace System.Data.EntityModel.SchemaObjectModel
{
///
/// Represents an role element in referential constraint element.
///
internal sealed class ReferentialConstraintRoleElement : SchemaElement
{
private List _roleProperties;
private IRelationshipEnd _end;
///
/// Constructs an EntityContainerAssociationSetEnd
///
/// Reference to the schema element.
public ReferentialConstraintRoleElement(ReferentialConstraint parentElement)
: base( parentElement )
{
}
public IList RoleProperties
{
get
{
if (_roleProperties == null)
{
_roleProperties = new List();
}
return _roleProperties;
}
}
public IRelationshipEnd End
{
get
{
return _end;
}
}
protected override bool HandleElement(XmlReader reader)
{
if (base.HandleElement(reader))
{
return true;
}
else if (CanHandleElement(reader, XmlConstants.PropertyRef))
{
HandlePropertyRefElement(reader);
return true;
}
return false;
}
protected override bool HandleAttribute(XmlReader reader)
{
if (CanHandleAttribute(reader, XmlConstants.Role))
{
HandleRoleAttribute(reader);
return true;
}
return false;
}
///
///
///
///
private void HandlePropertyRefElement(XmlReader reader)
{
PropertyRefElement property = new PropertyRefElement(ParentElement);
property.Parse(reader);
this.RoleProperties.Add(property);
}
private void HandleRoleAttribute(XmlReader reader)
{
string roleName;
Utils.GetString(Schema, reader, out roleName);
this.Name = roleName;
}
///
/// Used during the resolve phase to resolve the type name to the object that represents that type
///
internal override void ResolveTopLevelNames()
{
Debug.Assert(!String.IsNullOrEmpty(this.Name), "RoleName should never be empty");
IRelationship relationship = (IRelationship)this.ParentElement.ParentElement;
if (!relationship.TryGetEnd(this.Name, out _end))
{
AddError(ErrorCode.InvalidRoleInRelationshipConstraint,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InvalidEndRoleInRelationshipConstraint(this.Name, relationship.Name));
return;
}
// we are gauranteed that the _end has gone through ResolveNames, but
// we are not gauranteed that it was successful
if (_end.Type == null)
{
// an error has already been added for this
return;
}
}
internal override void Validate()
{
base.Validate();
// we can't resolve these names until validate because they will reference properties and types
// that may not be resolved when this objects ResolveNames gets called
Debug.Assert(_roleProperties != null, "xsd should have verified that there should be atleast one property ref element in referential role element");
foreach (PropertyRefElement property in _roleProperties)
{
if (!property.ResolveNames((SchemaEntityType)_end.Type))
{
AddError(ErrorCode.InvalidPropertyInRelationshipConstraint,
EdmSchemaErrorSeverity.Error,
System.Data.Entity.Strings.InvalidPropertyInRelationshipConstraint(
property.Name,
this.Name));
}
}
}
}
}
// 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
- Underline.cs
- BitmapEffectState.cs
- BindingList.cs
- XmlSerializationReader.cs
- EventProxy.cs
- DataBoundControlHelper.cs
- Operators.cs
- Propagator.ExtentPlaceholderCreator.cs
- SerialStream.cs
- SemaphoreFullException.cs
- EventLogPermissionEntryCollection.cs
- ObjectSet.cs
- DataGridViewCell.cs
- SessionState.cs
- URI.cs
- HtmlElement.cs
- PerformanceCounterPermissionAttribute.cs
- BuilderInfo.cs
- ObjectStateEntry.cs
- SizeAnimation.cs
- SchemaCollectionCompiler.cs
- CollectionViewSource.cs
- AlignmentXValidation.cs
- UnsafeCollabNativeMethods.cs
- HtmlButton.cs
- CursorConverter.cs
- HttpValueCollection.cs
- RemotingService.cs
- DataListItem.cs
- MimeWriter.cs
- DataGridCommandEventArgs.cs
- BamlWriter.cs
- ClickablePoint.cs
- OdbcErrorCollection.cs
- Input.cs
- NativeMethods.cs
- PropertyToken.cs
- SRDisplayNameAttribute.cs
- TraceContextEventArgs.cs
- QueryCreatedEventArgs.cs
- ExpressionEditor.cs
- JavaScriptString.cs
- TextShapeableCharacters.cs
- AuthenticateEventArgs.cs
- DecimalAnimationUsingKeyFrames.cs
- ImageIndexConverter.cs
- DataBinding.cs
- Logging.cs
- DesignTimeTemplateParser.cs
- hebrewshape.cs
- DockingAttribute.cs
- RuntimeArgumentHandle.cs
- XPathDocumentBuilder.cs
- BezierSegment.cs
- StreamDocument.cs
- SspiWrapper.cs
- OdbcCommand.cs
- DataGridTextBoxColumn.cs
- GraphicsContainer.cs
- DeflateEmulationStream.cs
- ScriptDescriptor.cs
- UnsafeNativeMethods.cs
- UidManager.cs
- XPathArrayIterator.cs
- OverflowException.cs
- SiteMapNodeItemEventArgs.cs
- CodeStatement.cs
- InputLanguageSource.cs
- SafeProcessHandle.cs
- NativeMethods.cs
- AddInToken.cs
- HostingEnvironmentSection.cs
- AssemblyInfo.cs
- MetadataUtilsSmi.cs
- Number.cs
- ReversePositionQuery.cs
- SynchronousReceiveBehavior.cs
- SizeConverter.cs
- MobileResource.cs
- FullTrustAssembliesSection.cs
- TextParagraphProperties.cs
- StylusButtonEventArgs.cs
- DataGridViewComboBoxCell.cs
- SqlSelectClauseBuilder.cs
- DecoderReplacementFallback.cs
- SqlTransaction.cs
- ProxyAttribute.cs
- OrderByBuilder.cs
- UpdateCompiler.cs
- Trigger.cs
- OleDbEnumerator.cs
- SrgsOneOf.cs
- GenericArgumentsUpdater.cs
- FontSource.cs
- InlineCategoriesDocument.cs
- ProtectedConfigurationSection.cs
- XmlTextEncoder.cs
- UserValidatedEventArgs.cs
- IsolatedStorageFilePermission.cs
- XmlSchemaAttributeGroup.cs