|
Программирование >> Каркас сущностей ado.net
<AssociationSet Name= FK BookAuthors Authors Association= Wrox.ProCSharp.Entities.Store.FK BookAuthors Authors > <End Role= Authors EntitySet= Authors /> <End Role= BookAuthors EntitySet= BookAuthors /> </AssociationSet> <AssociationSet Name= FK BookAuthors Books Association= BookDemoEntities.Store.FK BookAuthors Books > <End Role= Books EntitySet= Books /> <End Role= BookAuthors EntitySet= BookAuthors /> </AssociationSet> </EntityContainer> <EntityType Name= Authors > <Key> <PropertyRef Name= Id /> </Key> <Property Name= Id Type= int Nullable= false StoreGeneratedPattern= Identity /> <Property Name= FirstName Type= nvarchar Nullable= false MaxLength= 50 /> <Property Name= LastName Type= nvarchar Nullable= false MaxLength= 50 /> </EntityType> <EntityType Name= BookAuthors > <Key> <PropertyRef Name= BookId /> <PropertyRef Name= AuthorId /> </Key> <Property Name= BookId Type= int Nullable= false /> <Property Name= AuthorId Type= int Nullable= false /> </EntityType> <EntityType Name= Books > <Key> <PropertyRef Name= Id /> </Key> <Property Name= Id Type= int Nullable= false StoreGeneratedPattern= Identity /> <Property Name= Title Type= nvarchar Nullable= false MaxLength= 50 /> <Property Name= Publisher Type= nvarchar Nullable= false MaxLength= 50 /> </EntityType> <Association Name= FK BookAuthors Authors > <End Role= Authors Type= Wrox.ProCSharp.Entities.Store.Authors Multiplicity= 1 /> <End Role= BookAuthors Type= Wrox.ProCSharp.Entities.Store.BookAuthors Multiplicity= * /> <ReferentialConstraint> <Principal Role= Authors > <PropertyRef Name= Id /> </Principal> <Dependent Role= BookAuthors > <PropertyRef Name= AuthorId /> </Dependent> </ReferentialConstraint> </Association> <Association Name= FK BookAuthors Books > <End Role= Books Type= Wrox.ProCSharp.Entities.Store.Books Multiplicity= 1 /> <End Role= BookAuthors Type= Wrox.ProCSharp.Entities.Store.BookAuthors Multiplicity= * /> <ReferentialConstraint> <Principal Role= Books > <PropertyRef Name= Id /> </Principal> <Dependent Role= BookAuthors > <PropertyRef Name= BookId /> </Dependent> </ReferentialConstraint> </Association> </Schema> Концептуальный уровень Концептуальный уровень определяет классы .NET. Этот уровень создается на языке CSDL (Conceptual Schema Definition Language - язык концептуального определения схемы). На рис. А.2 показаны сущности Author и Book, определенные в дизайнере ADO.NET Entity Data Model Designer. Рис. А.2. Сущности Author и Book Ниже приведено содержимое CSDL, определяющее сущностные типы Book и Author. Оно было создано на основе базы данных Books. <Schema Namespace= BookEntities Alias= Self xmlns= http: schemas.microsoft.com/ado/2006/04/edm > <EntityContainer Name= BookEntities > <EntitySet Name= Authors EntityType= Wrox.ProCSharp.Entities.Author /> <EntitySet Name= Books EntityType= Wrox.ProCSharp.Entities.Book /> <AssociationSet Name= BookAuthors Association= Wrox.ProCSharp.Entities.BookAuthors > <End Role= Authors EntitySet= Authors /> <End Role= Books EntitySet= Books /> </AssociationSet> </EntityContainer> <EntityType Name= Author > <Key> <PropertyRef Name= Id /> </Key> <Property Name= Id Type= Int32 Nullable= false /> <Property Name= FirstName Type= String Nullable= false MaxLength= 50 /> <Property Name= LastName Type= String Nullable= false MaxLength= 50 /> <NavigationProperty Name= Books Relationship= BookDemoEntities .BookAuthors FromRole= Authors ToRole= Books /> </EntityType> <EntityType Name= Book > <Key> <PropertyRef Name= Id /> </Key> <Property Name= Id Type= Int32 Nullable= false /> <Property Name= Title Type= String Nullable= false MaxLength= 50 /> <Property Name= Publisher Type= String Nullable= false MaxLength= 50 /> <NavigationProperty Name= Authors Relationship= Wrox.ProCSharp.Entities.BookAuthors FromRole= Books ToRole= Authors /> </EntityType> <Association Name= BookAuthors > <End Type= Wrox.ProCSharp.Entities.Author Role= Authors Multiplicity= * /> <End Type= Wrox.ProCSharp.Entities.Book Role= Books Multiplicity= * /> </Association> </Schema> Сущность определена элементом EntityType, содержащим элементы Key, Property и NavigationProperty для описания свойств созданного класса. Элемент Property содержит атрибуты для описания имени и типа свойств .NET классов, сгенерированных дизайнером. Элемент Assotiation подключает типы Author и Book. Конструкция Multiplicity= * означает, что Author (автор) может написать много Books (книг), а одна книга может быть написана несколькими авторами. Уровень отображения Уровень отображения отображает определение типа сущности с CSDL на SSDL, используя язык MSL (Mapping Specification Language - язык спецификации отображения). Следующая спецификация включает элемент Mapping, содержащий элемент EntityTypeMapping для ссылки на тип Book языка CSDL и определяет MappingFragment для ссылки на таблицу Authors из SSDL. ScalarProperty отображает свойство класса .NET с атрибутом Name на столбец таблицы базы данных с атрибутом ColumnName. <Mapping Space= C-S xmlns= urn:schemas-microsoft-com:windows:storage:mapping:CS > <EntityContainerMapping StorageEntityContainer= dbo CdmEntityContainer= BookEntities > <EntitySetMapping Name= Authors > <EntityTypeMapping TypeName= IsTypeOf(Wrox.ProCSharp.Entities.Author) > <MappingFragment StoreEntitySet= Authors > <ScalarProperty Name= LastName ColumnName= LastName /> <ScalarProperty Name= FirstName ColumnName= FirstName /> <ScalarProperty Name= Id ColumnName= Id /> </MappingFragment> </EntityTypeMapping> </EntitySetMapping> <EntitySetMapping Name= Books > <EntityTypeMapping TypeName= IsTypeOf(Wrox.ProCSharp.Entities.Book) > <MappingFragment StoreEntitySet= Books > <ScalarProperty Name= Publisher ColumnName= Publisher /> <ScalarProperty Name= Title ColumnName= Title /> <ScalarProperty Name= Id ColumnName= Id /> </MappingFragment> </EntityTypeMapping> </EntitySetMapping> <AssociationSetMapping Name= AuthorBook TypeName= Wrox.ProCSharp.Entities.AuthorBook StoreEntitySet= BookAuthors > <EndProperty Name= Book > <ScalarProperty Name= Id ColumnName= BookId /> </EndProperty> <EndProperty Name= Author > <ScalarProperty Name= Id ColumnName= AuthorId /> </EndProperty> </AssociationSetMapping> </EntityContainerMapping> </Mapping> Сущности Сущностные классы, созданные дизайнером и созданные CSDL обычно наследуются от базового класса EntityObject, как видно на примере класса Book, приведенного ниже. Этот класс наследуется от базового класса EntityObject и определяет свойства, которые инициируют изменение информации в средствах доступа set. Созданный класс Book является частичным классом, который может быть расширен в новом исходном файле, определяющем тот же класс в том же пространстве имен. Методы, вызываемые средством доступа set, такие как OnTitleChanging() и OnTitleChanged() также являются частичными, поэтому можно реализовать эти методы в специальном расширении класса. Свойство Authors использует класс RelationshipManager для возврата элементов Book для автора.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |