Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / Relationship.cs / 1305376 / 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; private RelationshipEndCollection _ends; private List_constraints; private bool _isForeignKey; /// /// Construct a Relationship object /// /// the parent /// the kind of relationship public Relationship(Schema parent, RelationshipKind kind) : base(parent) { RelationshipKind = kind; if (Schema.DataModel == SchemaDataModelOption.EntityDataModel) { _isForeignKey = false; OtherContent.Add(Schema.SchemaSource); } else if (Schema.DataModel == SchemaDataModelOption.ProviderDataModel) { _isForeignKey = true; } } ////// List of Ends defined for this Association /// public IListEnds { get { if ( _ends == null ) _ends = new RelationshipEndCollection(); return _ends; } } /// /// Returns the list of constraints on this relation /// public IListConstraints { 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; } } ////// Is this a foreign key (aka foreign key) relationship? /// public bool IsForeignKey { get { return _isForeignKey; } } ////// 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) { if (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); if (this.Schema.DataModel == SchemaDataModelOption.EntityDataModel && this.Schema.SchemaVersion >= XmlConstants.EdmVersionForV2) { // in V2, referential constraint implies foreign key _isForeignKey = true; } } } } // 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
- SiteMapNodeCollection.cs
- ToolStripLocationCancelEventArgs.cs
- NativeMethods.cs
- GeneralTransform.cs
- ClientTarget.cs
- SerializerProvider.cs
- TileModeValidation.cs
- SimpleWebHandlerParser.cs
- DesignRelationCollection.cs
- RequestQueue.cs
- RankException.cs
- GradientBrush.cs
- RegexGroupCollection.cs
- SortAction.cs
- RawStylusSystemGestureInputReport.cs
- SoapAttributes.cs
- WorkflowItemPresenter.cs
- XmlUrlResolver.cs
- DataControlFieldTypeEditor.cs
- ProtocolsSection.cs
- ClientScriptManager.cs
- OrderedDictionary.cs
- BufferModesCollection.cs
- pingexception.cs
- TextTreeNode.cs
- TextDecorationCollection.cs
- UrlUtility.cs
- WebScriptMetadataInstanceContextProvider.cs
- PersistenceTypeAttribute.cs
- GridViewItemAutomationPeer.cs
- GlyphRunDrawing.cs
- XmlParserContext.cs
- DataObject.cs
- HttpsHostedTransportConfiguration.cs
- DesignParameter.cs
- SerializerWriterEventHandlers.cs
- WebMessageFormatHelper.cs
- xmlNames.cs
- EdmTypeAttribute.cs
- _Rfc2616CacheValidators.cs
- OleDbParameterCollection.cs
- SimpleTextLine.cs
- ProxyAssemblyNotLoadedException.cs
- _CacheStreams.cs
- WebPartDisplayMode.cs
- SemanticValue.cs
- TabItem.cs
- DashStyle.cs
- WindowsRegion.cs
- IODescriptionAttribute.cs
- ObjectListFieldCollection.cs
- ToolStripControlHost.cs
- WebPartTransformerAttribute.cs
- CriticalFinalizerObject.cs
- InputLanguageManager.cs
- SqlCharStream.cs
- securitymgrsite.cs
- HasCopySemanticsAttribute.cs
- DataSourceConverter.cs
- DesignerObject.cs
- MetadataItemEmitter.cs
- StaticResourceExtension.cs
- SiteMapProvider.cs
- EventProviderClassic.cs
- AccessControlList.cs
- TimelineClockCollection.cs
- WorkflowOwnerAsyncResult.cs
- MenuBase.cs
- UpdatePanelTriggerCollection.cs
- MarkupWriter.cs
- FieldAccessException.cs
- WSSecurityOneDotZeroReceiveSecurityHeader.cs
- BindingList.cs
- DataObject.cs
- SerializationEventsCache.cs
- _ProxyChain.cs
- CompareValidator.cs
- SynthesizerStateChangedEventArgs.cs
- DtrList.cs
- AuthorizationRuleCollection.cs
- DataGridViewCellMouseEventArgs.cs
- BoolExpressionVisitors.cs
- FactoryId.cs
- ExpressionPrinter.cs
- ToolStripOverflowButton.cs
- IndentedWriter.cs
- UTF7Encoding.cs
- EventToken.cs
- CacheMemory.cs
- MetadataArtifactLoaderComposite.cs
- XmlWhitespace.cs
- BuildProvider.cs
- SerialPort.cs
- Item.cs
- KeyBinding.cs
- SafeEventLogReadHandle.cs
- EncryptedType.cs
- Site.cs
- RegexWorker.cs
- SettingsProperty.cs