Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Splitter.cs
- FrameworkObject.cs
- SqlClientWrapperSmiStream.cs
- TextFindEngine.cs
- SqlReorderer.cs
- dbenumerator.cs
- userdatakeys.cs
- StructuredTypeEmitter.cs
- ParameterCollection.cs
- MultiPageTextView.cs
- CommonRemoteMemoryBlock.cs
- CodeTypeConstructor.cs
- externdll.cs
- PipeException.cs
- XmlSchemaComplexType.cs
- TimeSpanSecondsConverter.cs
- WebServiceEndpoint.cs
- AutomationPatternInfo.cs
- DataContext.cs
- TextMessageEncodingElement.cs
- LambdaReference.cs
- SQLByteStorage.cs
- OleDbDataAdapter.cs
- JsonDataContract.cs
- StringArrayConverter.cs
- StateMachineAction.cs
- CollectionViewSource.cs
- BasePropertyDescriptor.cs
- hebrewshape.cs
- FieldDescriptor.cs
- DataObjectCopyingEventArgs.cs
- ArrayElementGridEntry.cs
- ComNativeDescriptor.cs
- _Win32.cs
- WorkerRequest.cs
- SqlConnectionPoolProviderInfo.cs
- Internal.cs
- MimeTypeAttribute.cs
- SizeValueSerializer.cs
- PolyBezierSegment.cs
- WpfGeneratedKnownTypes.cs
- StandardCommands.cs
- Style.cs
- ExpressionBuilderCollection.cs
- SafeNativeMethodsMilCoreApi.cs
- GlyphingCache.cs
- GeneralTransform3DTo2D.cs
- TaiwanLunisolarCalendar.cs
- MetaForeignKeyColumn.cs
- DesignerVerb.cs
- UnsafeMethods.cs
- CacheForPrimitiveTypes.cs
- FixedSOMTable.cs
- ErasingStroke.cs
- CreatingCookieEventArgs.cs
- ToolStripPanelRenderEventArgs.cs
- DefaultValueTypeConverter.cs
- RowParagraph.cs
- StartUpEventArgs.cs
- UnmanagedMemoryStream.cs
- RegistrationProxy.cs
- TreeNodeSelectionProcessor.cs
- HttpHandlerAction.cs
- ValidatingReaderNodeData.cs
- ServerIdentity.cs
- ArraySubsetEnumerator.cs
- AssemblyInfo.cs
- DateTimeSerializationSection.cs
- AutomationAttributeInfo.cs
- KeyTimeConverter.cs
- MediaCommands.cs
- InkCanvas.cs
- ProfilePropertyMetadata.cs
- XPathSelectionIterator.cs
- WebPartConnectionsCancelVerb.cs
- ConfigXmlElement.cs
- TextRangeEditLists.cs
- LongSumAggregationOperator.cs
- SchemaImporter.cs
- StylusPointPropertyInfo.cs
- sitestring.cs
- WorkflowTransactionService.cs
- GlyphRunDrawing.cs
- NativeMethods.cs
- SoapRpcServiceAttribute.cs
- SevenBitStream.cs
- RelationshipDetailsRow.cs
- XMLDiffLoader.cs
- MILUtilities.cs
- XmlCountingReader.cs
- RelationshipSet.cs
- TimerEventSubscriptionCollection.cs
- XmlElementList.cs
- UpdatableWrapper.cs
- DateTimeUtil.cs
- NamedPipeTransportBindingElement.cs
- SqlDeflator.cs
- GZipStream.cs
- PropertyInformationCollection.cs
- IERequestCache.cs