Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / Relationship.cs / 3 / 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; RelationshipEndCollection _ends; private List_constraints; /// /// Construct a Relationship object /// /// the parent /// the kind of relationship public Relationship(Schema parent, RelationshipKind kind) : base(parent) { RelationshipKind = kind; } ////// 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; } } ////// 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 && 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); } } } // 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; RelationshipEndCollection _ends; private List_constraints; /// /// Construct a Relationship object /// /// the parent /// the kind of relationship public Relationship(Schema parent, RelationshipKind kind) : base(parent) { RelationshipKind = kind; } ////// 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; } } ////// 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 && 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); } } } // 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
- XamlToRtfWriter.cs
- Pkcs7Recipient.cs
- UserControlAutomationPeer.cs
- GenericPrincipal.cs
- ListDictionaryInternal.cs
- DesignerForm.cs
- CollectionViewSource.cs
- WindowsPrincipal.cs
- COM2Enum.cs
- BrowserDefinition.cs
- XsltCompileContext.cs
- HtmlSelect.cs
- ColorContext.cs
- MetabaseReader.cs
- IDReferencePropertyAttribute.cs
- PageCodeDomTreeGenerator.cs
- shaperfactory.cs
- ListViewGroupConverter.cs
- SafeNativeMethodsMilCoreApi.cs
- CellParagraph.cs
- MessageHeaderAttribute.cs
- EntityDataSourceSelectingEventArgs.cs
- DataGridViewBand.cs
- TreeWalkHelper.cs
- MarshalByValueComponent.cs
- ResizeGrip.cs
- TextEditorContextMenu.cs
- XmlSchemaDocumentation.cs
- ClientSponsor.cs
- ObsoleteAttribute.cs
- Hyperlink.cs
- BitmapEffectState.cs
- MimeWriter.cs
- XmlValidatingReaderImpl.cs
- NativeMethods.cs
- RegexParser.cs
- ExpressionVisitor.cs
- DataGridViewImageColumn.cs
- DataGridViewMethods.cs
- DoubleAnimationUsingKeyFrames.cs
- WebSysDefaultValueAttribute.cs
- WebReference.cs
- ContractHandle.cs
- DataGridRow.cs
- GenericRootAutomationPeer.cs
- ConnectionStringsSection.cs
- BamlStream.cs
- EntityDesignerDataSourceView.cs
- ASCIIEncoding.cs
- UTF32Encoding.cs
- DependencyPropertyConverter.cs
- TrustManagerMoreInformation.cs
- FileLevelControlBuilderAttribute.cs
- AlignmentXValidation.cs
- BitmapEncoder.cs
- RequestBringIntoViewEventArgs.cs
- CapabilitiesRule.cs
- WebPartConnectionsConnectVerb.cs
- HtmlTableCell.cs
- VisualStateChangedEventArgs.cs
- InstanceContextManager.cs
- TraceProvider.cs
- UpdateTranslator.cs
- QuaternionConverter.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- XmlSerializationWriter.cs
- SiteMapDataSource.cs
- AsyncStreamReader.cs
- PageCodeDomTreeGenerator.cs
- LineVisual.cs
- DynamicPropertyHolder.cs
- SiteMapDesignerDataSourceView.cs
- EntitySqlQueryCacheKey.cs
- HotSpotCollection.cs
- OutKeywords.cs
- TranslateTransform.cs
- HttpDictionary.cs
- ButtonBase.cs
- OleStrCAMarshaler.cs
- WebPartZoneCollection.cs
- CodeStatement.cs
- XmlComment.cs
- SessionStateUtil.cs
- xml.cs
- HWStack.cs
- EditingMode.cs
- DocumentGridContextMenu.cs
- Serializer.cs
- DetailsViewRowCollection.cs
- SettingsAttributeDictionary.cs
- DataBoundControl.cs
- DateTimeParse.cs
- SchemaCollectionCompiler.cs
- ToggleProviderWrapper.cs
- CacheForPrimitiveTypes.cs
- FixedSOMLineRanges.cs
- ResourceSet.cs
- RoleGroupCollection.cs
- RemoteWebConfigurationHost.cs
- MultiBindingExpression.cs