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


набор сущностей

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

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

Чтобы экземпляр типа сущности существовал в наборе сущности, должны быть выполнены следующие условия.

  • Тип экземпляра является либо тем же, что и тип сущности, в котором находится набор сущностей, либо подтипом типа сущности.

  • Ключ сущности для экземпляра является уникальным в наборе сущностей.

  • Экземпляр не существует ни в каком другом наборе сущностей.

    Примечание.

    Несколько наборов сущностей могут быть определены при помощи одного и того же типа сущности, однако экземпляр одного типа сущности может существовать только в одном наборе сущностей.

Нет необходимости определять набор сущностей для каждого типа сущности в концептуальной модели.

Пример

На приведенной ниже схеме показана концептуальная модель с тремя типами сущностей: Book, Publisher и Author.

Example model with three entity types

На следующей схеме показаны два набора сущностей (Books и Publishers) и набор ассоциаций (PublishedBy), основанный на приведенной выше концептуальной модели. 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>

Предусмотрена возможность определять несколько наборов сущностей на тип (модель MEST). Далее язык CSDL определяет контейнер сущностей с двумя наборами сущностей для типа сущности Book.

<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" />
  <AssociationSet Name="PublishedBy" Association="BooksModel.PublishedBy">
    <End Role="Book" EntitySet="Books" />
    <End Role="Publisher" EntitySet="Publishers" />
  </AssociationSet>
  <AssociationSet Name="BookAuthor" Association="BooksModel.BookAuthor">
    <End Role="Book" EntitySet="Books" />
    <End Role="Author" EntitySet="Authors" />
  </AssociationSet>
</EntityContainer>

См. также