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


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

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

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

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

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

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

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

    Замечание

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

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

Пример

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

Пример модели с тремя типами сущностей

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

Можно определить несколько наборов сущностей для каждого типа (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>

См. также