Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / EntityContainerRelationshipSetEnd.cs / 2 / EntityContainerRelationshipSetEnd.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 RelationshipSetEnd element. /// internal class EntityContainerRelationshipSetEnd : SchemaElement { private IRelationshipEnd _relationshipEnd; private string _unresolvedEntitySetName; private EntityContainerEntitySet _entitySet; ////// Constructs an EntityContainerRelationshipSetEnd /// /// Reference to the schema element. public EntityContainerRelationshipSetEnd( EntityContainerRelationshipSet parentElement ) : base( parentElement ) { } ////// the End in the parent’s Association that this element refers to /// public IRelationshipEnd RelationshipEnd { get { return _relationshipEnd; } internal set { _relationshipEnd = value; } } public EntityContainerEntitySet EntitySet { get { return _entitySet; } internal set { _entitySet = value; } } protected override bool ProhibitAttribute(string namespaceUri, string localName) { if (base.ProhibitAttribute(namespaceUri, localName)) { return true; } if (namespaceUri == null && localName == XmlConstants.Name) { return false; } return false; } protected override bool HandleAttribute(XmlReader reader) { if (base.HandleAttribute(reader)) { return true; } else if (CanHandleAttribute(reader, XmlConstants.EntitySet)) { HandleEntitySetAttribute(reader); return true; } return false; } ////// This is the method that is called when an EntitySet Attribute is encountered. /// /// The XmlRead positned at the extent attribute. private void HandleEntitySetAttribute( XmlReader reader ) { if (Schema.DataModel == SchemaDataModelOption.ProviderDataModel) { // ssdl will take anything, because this is the table name, and we // can't predict what the vendor will need in a table name _unresolvedEntitySetName = reader.Value; } else { _unresolvedEntitySetName = HandleUndottedNameAttribute(reader, _unresolvedEntitySetName); } } ////// Used during the resolve phase to resolve the type name to the object that represents that type /// internal override void ResolveTopLevelNames() { base.ResolveTopLevelNames(); if ( _entitySet == null ) { _entitySet = this.ParentElement.ParentElement.FindEntitySet( _unresolvedEntitySetName ); if ( _entitySet == null ) { AddError( ErrorCode.InvalidEndEntitySet, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InvalidEntitySetNameReference(_unresolvedEntitySetName, Name ) ); } } } ////// Do all validation for this element here, and delegate to all sub elements /// internal override void Validate() { base.Validate(); if ( _relationshipEnd == null || _entitySet == null ) { return; } // We need to allow 2 kind of scenarios: // 1> If you have a relationship type defined between Customer and Order, then you can have a association set in // which the Customer end refers to a Entity Set of type GoodCustomer where GoodCustomer type derives from Customer // 2> If you have a relationship type defined between GoodCustomer and Order, then you can have a relationship // set which GoodCustomer end refers to an entity set whose entity type is Customer (where GoodCustomer derives // from Customer). This scenario enables us to support scenarios where you want specific types in an entity set // to take part in a relationship. if ( !_relationshipEnd.Type.IsOfType( _entitySet.EntityType ) && !_entitySet.EntityType.IsOfType( _relationshipEnd.Type )) { AddError( ErrorCode.InvalidEndEntitySet, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InvalidEndEntitySetTypeMismatch(_relationshipEnd.Name ) ); } } ////// The parent element as an EntityContainerProperty /// internal new EntityContainerRelationshipSet ParentElement { get { return (EntityContainerRelationshipSet)( base.ParentElement ); } } } } // 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 RelationshipSetEnd element. /// internal class EntityContainerRelationshipSetEnd : SchemaElement { private IRelationshipEnd _relationshipEnd; private string _unresolvedEntitySetName; private EntityContainerEntitySet _entitySet; ////// Constructs an EntityContainerRelationshipSetEnd /// /// Reference to the schema element. public EntityContainerRelationshipSetEnd( EntityContainerRelationshipSet parentElement ) : base( parentElement ) { } ////// the End in the parent’s Association that this element refers to /// public IRelationshipEnd RelationshipEnd { get { return _relationshipEnd; } internal set { _relationshipEnd = value; } } public EntityContainerEntitySet EntitySet { get { return _entitySet; } internal set { _entitySet = value; } } protected override bool ProhibitAttribute(string namespaceUri, string localName) { if (base.ProhibitAttribute(namespaceUri, localName)) { return true; } if (namespaceUri == null && localName == XmlConstants.Name) { return false; } return false; } protected override bool HandleAttribute(XmlReader reader) { if (base.HandleAttribute(reader)) { return true; } else if (CanHandleAttribute(reader, XmlConstants.EntitySet)) { HandleEntitySetAttribute(reader); return true; } return false; } ////// This is the method that is called when an EntitySet Attribute is encountered. /// /// The XmlRead positned at the extent attribute. private void HandleEntitySetAttribute( XmlReader reader ) { if (Schema.DataModel == SchemaDataModelOption.ProviderDataModel) { // ssdl will take anything, because this is the table name, and we // can't predict what the vendor will need in a table name _unresolvedEntitySetName = reader.Value; } else { _unresolvedEntitySetName = HandleUndottedNameAttribute(reader, _unresolvedEntitySetName); } } ////// Used during the resolve phase to resolve the type name to the object that represents that type /// internal override void ResolveTopLevelNames() { base.ResolveTopLevelNames(); if ( _entitySet == null ) { _entitySet = this.ParentElement.ParentElement.FindEntitySet( _unresolvedEntitySetName ); if ( _entitySet == null ) { AddError( ErrorCode.InvalidEndEntitySet, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InvalidEntitySetNameReference(_unresolvedEntitySetName, Name ) ); } } } ////// Do all validation for this element here, and delegate to all sub elements /// internal override void Validate() { base.Validate(); if ( _relationshipEnd == null || _entitySet == null ) { return; } // We need to allow 2 kind of scenarios: // 1> If you have a relationship type defined between Customer and Order, then you can have a association set in // which the Customer end refers to a Entity Set of type GoodCustomer where GoodCustomer type derives from Customer // 2> If you have a relationship type defined between GoodCustomer and Order, then you can have a relationship // set which GoodCustomer end refers to an entity set whose entity type is Customer (where GoodCustomer derives // from Customer). This scenario enables us to support scenarios where you want specific types in an entity set // to take part in a relationship. if ( !_relationshipEnd.Type.IsOfType( _entitySet.EntityType ) && !_entitySet.EntityType.IsOfType( _relationshipEnd.Type )) { AddError( ErrorCode.InvalidEndEntitySet, EdmSchemaErrorSeverity.Error, System.Data.Entity.Strings.InvalidEndEntitySetTypeMismatch(_relationshipEnd.Name ) ); } } ////// The parent element as an EntityContainerProperty /// internal new EntityContainerRelationshipSet ParentElement { get { return (EntityContainerRelationshipSet)( base.ParentElement ); } } } } // 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
- ParallelTimeline.cs
- WebPartZoneDesigner.cs
- Point3DCollection.cs
- TypeExtension.cs
- SimpleBitVector32.cs
- Table.cs
- GotoExpression.cs
- FormsAuthenticationConfiguration.cs
- TimeIntervalCollection.cs
- FixedPageAutomationPeer.cs
- WizardForm.cs
- Converter.cs
- BrowserTree.cs
- GlyphsSerializer.cs
- DataBoundControlHelper.cs
- DocumentPageViewAutomationPeer.cs
- CodeTypeParameter.cs
- DataGridViewEditingControlShowingEventArgs.cs
- LinkDesigner.cs
- ControlBuilderAttribute.cs
- DataControlFieldHeaderCell.cs
- ProcessThread.cs
- InputGestureCollection.cs
- SqlGenericUtil.cs
- SQLInt16.cs
- DataGridViewRowsAddedEventArgs.cs
- DefaultSection.cs
- DbUpdateCommandTree.cs
- DispatchOperation.cs
- LazyTextWriterCreator.cs
- SchemaImporterExtensionElementCollection.cs
- CommonRemoteMemoryBlock.cs
- InkCanvas.cs
- PrintDialog.cs
- PathSegment.cs
- AssociationSetEnd.cs
- TableLayout.cs
- HtmlTitle.cs
- FlowLayoutPanel.cs
- DescriptionAttribute.cs
- DependencyPropertyAttribute.cs
- WebSysDescriptionAttribute.cs
- SoundPlayer.cs
- Parser.cs
- TreeNodeCollectionEditor.cs
- ClientUrlResolverWrapper.cs
- UriSectionReader.cs
- ProfileGroupSettingsCollection.cs
- ComPlusThreadInitializer.cs
- TypefaceMap.cs
- RequiredAttributeAttribute.cs
- SqlDataAdapter.cs
- EditorPartCollection.cs
- SafeEventLogWriteHandle.cs
- MetadataArtifactLoaderCompositeFile.cs
- FirewallWrapper.cs
- ProxyGenerationError.cs
- HttpCapabilitiesEvaluator.cs
- dbenumerator.cs
- AuthenticationManager.cs
- ErrorFormatter.cs
- Tablet.cs
- DataGridViewCellCancelEventArgs.cs
- TimeSpanStorage.cs
- wgx_sdk_version.cs
- ScriptManager.cs
- ExtractorMetadata.cs
- SqlLiftWhereClauses.cs
- StatusBar.cs
- CellConstantDomain.cs
- Section.cs
- GridViewColumnCollection.cs
- WebPartTransformerCollection.cs
- OracleLob.cs
- StatusBarAutomationPeer.cs
- EditorPartChrome.cs
- HtmlInputFile.cs
- MessageQueueInstaller.cs
- PropertyOverridesDialog.cs
- RecommendedAsConfigurableAttribute.cs
- DataGridViewCellValidatingEventArgs.cs
- AdjustableArrowCap.cs
- CustomTypeDescriptor.cs
- AdornerHitTestResult.cs
- ViewCellSlot.cs
- WsatTransactionInfo.cs
- OdbcParameter.cs
- InkCanvasAutomationPeer.cs
- PagesChangedEventArgs.cs
- NaturalLanguageHyphenator.cs
- Assembly.cs
- DispatcherTimer.cs
- DataGridItem.cs
- PagesSection.cs
- HttpVersion.cs
- PolyBezierSegmentFigureLogic.cs
- EncodingNLS.cs
- ProtocolsConfiguration.cs
- HighlightVisual.cs
- DbConnectionPoolOptions.cs