Программирование >>  Каркас сущностей ado.net 

1 [ 2 ] 3 4 5 ... 8


<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 для автора.



1 [ 2 ] 3 4 5 ... 8

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика