набор ассоциаций
Набор ассоциаций — это логический контейнер для экземпляров ассоциаций одного типа. Набор ассоциаций не является конструктом моделирования данных, то есть не описывает структуру данных или связи. Вместо этого ассоциация обеспечивает конструкт для среды размещения или хранения (например, для среды CLR или базы данных сервера SQL), позволяя группировать экземпляры ассоциаций так, чтобы они были сопоставлены хранилищу данных.
Набор ассоциаций определяется в контейнере сущностей, который представляет собой логическую группирование наборов сущностей и наборов ассоциаций.
Определение набора ассоциаций содержит следующую информацию.
Имя набора ассоциаций. (обязательно)
Ассоциация, экземпляры которой будут являться содержимым. (обязательно)
Заканчивается два набора связей.
Пример
На приведенной ниже схеме показана концептуальная модель с двумя ассоциациями: PublishedBy
и WrittenBy
. Информации о наборах ассоциаций не содержится в схеме, однако на следующей схеме показан пример наборов ассоциаций и наборов сущностей на основе этой модели.
В следующем примере показан набор ассоциаций (PublishedBy
) и два набора сущностей (Books
и Publishers
) на основе приведенной выше концептуальной модели. Bi в наборе Books
сущностей представляет экземпляр типа сущности Book
во время выполнения. Аналогичным образом Pj представляет Publisher
экземпляр в наборе Publishers
сущностей. BiPj представляет экземпляр ассоциации PublishedBy
в наборе ассоциаций PublishedBy
.
В ADO.NET Entity Framework используется язык, зависящий от домена (DSL), называемый языком определения концептуальной схемы (CSDL) для определения концептуальных моделей. Далее на языке CSDL определяется контейнер сущностей с одним набором ассоциаций для каждой ассоциации на приведенной выше схеме. Обратите внимание, что имя и ассоциация для каждого набора ассоциаций определены при помощи атрибутов XML.
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
</EntityContainer>
Можно определить несколько наборов ассоциаций для каждой ассоциации, если два набора ассоциаций не используют конец набора ассоциаций. Далее на языке CSDL определяется контейнер сущностей с двумя наборами ассоциаций для ассоциации WrittenBy
: Обратите внимание, что несколько наборов сущностей были определены для типов сущностей Book
и Author
и что наборы ассоциаций не имеют одной и той же конечной точки ассоциации.
<EntityContainer Name="BooksContainer" >
<EntitySet Name="Books" EntityType="BooksModel.Book" />
<EntitySet Name="FictionBooks" EntityType="BooksModel.Book" />
<EntitySet Name="Publishers" EntityType="BooksModel.Publisher" />
<EntitySet Name="Authors" EntityType="BooksModel.Author" />
<EntitySet Name="FictionAuthors" EntityType="BooksModel.Author" />
<AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
<End Role="Book" EntitySet="Books" />
<End Role="Publisher" EntitySet="Publishers" />
</AssociationSet>
<AssociationSet Name="WrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="Books" />
<End Role="Author" EntitySet="Authors" />
</AssociationSet>
<AssociationSet Name="FictionWrittenBy" Association="BooksModel.WrittenBy">
<End Role="Book" EntitySet="FictionBooks" />
<End Role="Author" EntitySet="FictionAuthors" />
</AssociationSet>
</EntityContainer>