Code:
/ 4.0 / 4.0 / 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. //---------------------------------------------------------------------- //// 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
- WebBrowserNavigatingEventHandler.cs
- DesignRelation.cs
- ButtonBaseAdapter.cs
- GridSplitter.cs
- LicenseProviderAttribute.cs
- OutputCacheSettingsSection.cs
- ContractTypeNameElement.cs
- serverconfig.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- BindStream.cs
- EncoderBestFitFallback.cs
- ObjectResult.cs
- DesignerActionPanel.cs
- ConfigurationSettings.cs
- WebPermission.cs
- ContentOperations.cs
- Error.cs
- AutomationIdentifierGuids.cs
- cookiecollection.cs
- TextDecorations.cs
- MemoryPressure.cs
- HMACMD5.cs
- TableCell.cs
- Frame.cs
- MetricEntry.cs
- ShaderEffect.cs
- Attribute.cs
- SerializerProvider.cs
- FontDialog.cs
- UIAgentMonitorHandle.cs
- RestClientProxyHandler.cs
- RelationshipEnd.cs
- XhtmlConformanceSection.cs
- XmlDownloadManager.cs
- XslAst.cs
- GroupPartitionExpr.cs
- VerificationException.cs
- InstanceDataCollectionCollection.cs
- DocumentReference.cs
- GridViewCellAutomationPeer.cs
- FactoryGenerator.cs
- FigureParaClient.cs
- FormViewInsertedEventArgs.cs
- XmlDataImplementation.cs
- MetadataArtifactLoaderResource.cs
- VisualTarget.cs
- BlockUIContainer.cs
- StylusButtonEventArgs.cs
- ContainerActivationHelper.cs
- FilteredReadOnlyMetadataCollection.cs
- SafeMILHandleMemoryPressure.cs
- SspiHelper.cs
- CalendarItem.cs
- DecoderBestFitFallback.cs
- SqlSelectClauseBuilder.cs
- CustomPopupPlacement.cs
- ExtensionQuery.cs
- StateMachineHelpers.cs
- DeleteWorkflowOwnerCommand.cs
- MenuItemCollection.cs
- GACIdentityPermission.cs
- SiteMapPath.cs
- WindowsStreamSecurityUpgradeProvider.cs
- EarlyBoundInfo.cs
- MsmqIntegrationSecurity.cs
- TextEndOfSegment.cs
- StandardOleMarshalObject.cs
- ComponentDispatcher.cs
- ObjectView.cs
- DbParameterCollectionHelper.cs
- SerializableReadOnlyDictionary.cs
- ResizeGrip.cs
- SelectionPattern.cs
- XmlObjectSerializerReadContextComplex.cs
- MetafileHeaderWmf.cs
- MailWebEventProvider.cs
- EntityDataSourceStatementEditor.cs
- Listbox.cs
- TextDecorationCollectionConverter.cs
- HashHelper.cs
- CheckPair.cs
- SHA1.cs
- AutomationIdentifier.cs
- DbProviderServices.cs
- TraversalRequest.cs
- BypassElementCollection.cs
- TextServicesCompartment.cs
- DataGridParentRows.cs
- ToolboxControl.cs
- NotSupportedException.cs
- FaultHandlingFilter.cs
- WeakReferenceKey.cs
- EDesignUtil.cs
- ExpressionCopier.cs
- UrlRoutingHandler.cs
- DataControlPagerLinkButton.cs
- DataObjectEventArgs.cs
- CodeChecksumPragma.cs
- Exception.cs
- DocumentEventArgs.cs