Поделиться через


набор ассоциаций

Набор ассоциаций — это логический контейнер для экземпляров ассоциаций одного типа. Набор ассоциаций не является конструктом моделирования данных, то есть не описывает структуру данных или связи. Вместо этого ассоциация обеспечивает конструкт для среды размещения или хранения (например, для среды CLR или базы данных сервера SQL), позволяя группировать экземпляры ассоциаций так, чтобы они были сопоставлены хранилищу данных.

Набор ассоциаций определяется в контейнере сущностей, который представляет собой логическую группирование наборов сущностей и наборов ассоциаций.

Определение набора ассоциаций содержит следующую информацию.

  • Имя набора ассоциаций. (обязательно)

  • Ассоциация, экземпляры которой будут являться содержимым. (обязательно)

  • Заканчивается два набора связей.

Пример

На приведенной ниже схеме показана концептуальная модель с двумя ассоциациями: PublishedBy и WrittenBy. Информации о наборах ассоциаций не содержится в схеме, однако на следующей схеме показан пример наборов ассоциаций и наборов сущностей на основе этой модели.

Example model with three entity types

В следующем примере показан набор ассоциаций (PublishedBy) и два набора сущностей (Books и Publishers) на основе приведенной выше концептуальной модели. Bi в наборе Books сущностей представляет экземпляр типа сущности Book во время выполнения. Аналогичным образом Pj представляет Publisher экземпляр в наборе Publishers сущностей. BiPj представляет экземпляр ассоциации PublishedBy в наборе ассоциаций PublishedBy .

Screenshot that shows a Sets example.

В 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>

См. также