набор сущностей (модель EDM)
Набор сущностей — это логический контейнер для экземпляров типа сущности и экземпляров любого производного типа сущности, полученного из этого типа сущности. (Дополнительные сведения о производных типах см. в разделе Модель EDM: наследование.) Связь между типом сущности и набором сущностей схожа со связью между строкой и таблицей в реляционной базе данных. Как и строка, тип сущности описывает структуру данных, и, как и таблица, набор сущностей содержит экземпляры данной структуры. Набор сущностей не является конструктом моделирования данных; он не описывает структуру данных. Вместо этого набор сущностей обеспечивает конструкт для среды размещения или хранения (например, для среды CLR или базы данных сервера SQL), позволяя группировать экземпляры типа сущности так, чтобы они были сопоставлены хранилищу данных.
Набор сущностей определяется внутри контейнера сущностей, который является логической группой наборов сущностей и наборов ассоциаций.
Чтобы экземпляр типа сущности существовал в наборе сущности, должны быть выполнены следующие условия.
Тип экземпляра является либо тем же, что и тип сущности, в котором находится набор сущностей, либо подтипом типа сущности.
Ключ сущности для экземпляра является уникальным внутри набора сущностей.
Экземпляр не существует ни в каком другом наборе сущностей.
Примечание Несколько наборов сущностей могут быть определены при помощи одного и того же типа сущности, однако экземпляр одного типа сущности может существовать только в одном наборе сущностей.
Нет необходимости определять набор сущностей для каждого типа сущности в концептуальной модели.
Пример
На приведенной ниже схеме показана концептуальная модель с тремя типами сущностей: Book, Publisher и Author.
На следующей схеме показаны два набора сущностей (Books и Publishers) и набор ассоциаций (PublishedBy), основанный на приведенной выше концептуальной модели. Bi в наборе сущностей Books представляет экземпляр типа сущности Book во время выполнения. Схожим образом, Pj представляет экземпляр Publisher в наборе сущностей Publishers. BiPj представляет экземпляр ассоциации PublishedBy в наборе ассоциаций PublishedBy.
Платформа ADO.NET Entity Framework использует доменный язык DSL, называемый языком CSDL (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>