Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Модель данных сущности (EDM) использует три ключевых понятия для описания структуры данных: типа сущности, типа связи и свойства. Это наиболее важные понятия в описании структуры данных в любой реализации EDM.
Тип сущности
Тип сущности является основным стандартным блоком для описания структуры данных с помощью модели данных сущности. В концептуальной модели типы сущностей создаются из свойств и описывают структуру концепций верхнего уровня, таких как клиенты и заказы в бизнес-приложении. Таким же образом, как определение класса в компьютерной программе является шаблоном для экземпляров класса, тип сущности является шаблоном для сущностей. Сущность представляет конкретный объект (например, конкретный клиент или заказ). Каждая сущность должна иметь уникальный ключ сущности в наборе сущностей. Набор сущностей — это коллекция экземпляров определенного типа сущности. Наборы сущностей (и наборы ассоциаций) логически группируются в контейнер сущностей.
Наследование поддерживается с типами сущностей: то есть один тип сущности может быть производным от другого. Дополнительные сведения см. в разделе "Модель данных сущности: наследование".
Тип связи
Тип ассоциации (также называемый ассоциацией) является основным стандартным блоком для описания связей в модели данных сущностей. В концептуальной модели ассоциация представляет собой отношения между двумя типами сущностей (такими как Клиент и Заказ). Каждая ассоциация имеет два конца ассоциации, указывающих типы сущностей, участвующих в ассоциации. Каждый конец ассоциации также указывает кратность конца ассоциации , указывающую количество сущностей, которые могут находиться в этом конце связи. Кратность конца связи может иметь значение одного (1), ноль или один (0..1) или многие (*). Сущности на одном конце ассоциации можно получить через свойства навигации или через внешние ключи, если они определены в типе сущности. Дополнительные сведения см. в свойстве внешнего ключа.
В приложении экземпляр ассоциации представляет конкретную ассоциацию (например, ассоциацию между экземпляром клиента и экземплярами заказа). Экземпляры ассоциации логически группируются в наборе ассоциаций. Наборы ассоциаций (и наборы сущностей) логически группируются в контейнер сущностей.
Недвижимость
Типы сущностей содержат свойства , определяющие их структуру и характеристики. Например, тип сущности Customer может иметь такие свойства, как CustomerId, Name и Address.
Свойства в концептуальной модели аналогичны свойствам, определенным в классе в компьютерной программе. Таким же образом, как свойства класса определяют форму класса и содержат сведения об объектах, свойства в концептуальной модели определяют форму типа сущности и содержат сведения о экземплярах типов сущностей.
Свойство может содержать примитивные данные (например, строку, целое число или логическое значение) или структурированные данные (например, сложный тип). Дополнительные сведения см. в разделе "Модель данных сущности: примитивные типы данных".
Представления концептуальной модели
Концептуальная модель — это определенное представление структуры некоторых данных в виде сущностей и связей. Одним из способов представления концептуальной модели является схема. На следующей схеме представлена концептуальная модель с тремя типами сущностей (, Book
и двумя ассоциациями) (Publisher
Author
и PublishedBy
WrittenBy
):
Однако это представление имеет некоторые недостатки, когда дело доходит до передачи некоторых сведений о модели. Например, сведения о типе свойств и наборе сущностей не передаются на схеме. Богатство концептуальной модели можно передать более четко с помощью языка для конкретного домена (DSL). Платформа ADO.NET Entity Framework использует XML-язык DSL под названием Язык определения концептуальной схемы (CSDL) для определения концептуальных моделей. Ниже приведено определение CSDL концептуальной модели на приведенной выше схеме:
<Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm"
xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration"
xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
Namespace="BooksModel" Alias="Self">
<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>
<EntityType Name="Book">
<Key>
<PropertyRef Name="ISBN" />
</Key>
<Property Type="String" Name="ISBN" Nullable="false" />
<Property Type="String" Name="Title" Nullable="false" />
<Property Type="Decimal" Name="Revision" Nullable="false" Precision="29" Scale="29" />
<NavigationProperty Name="Publisher" Relationship="BooksModel.PublishedBy"
FromRole="Book" ToRole="Publisher" />
<NavigationProperty Name="Authors" Relationship="BooksModel.WrittenBy"
FromRole="Book" ToRole="Author" />
</EntityType>
<EntityType Name="Publisher">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Type="Int32" Name="Id" Nullable="false" />
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="String" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
FromRole="Publisher" ToRole="Book" />
</EntityType>
<EntityType Name="Author">
<Key>
<PropertyRef Name="Name" />
<PropertyRef Name="Address" />
</Key>
<Property Type="String" Name="Name" Nullable="false" />
<Property Type="String" Name="Address" Nullable="false" />
<NavigationProperty Name="Books" Relationship="BooksModel.WrittenBy"
FromRole="Author" ToRole="Book" />
</EntityType>
<Association Name="PublishedBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
<End Type="BooksModel.Publisher" Role="Publisher" Multiplicity="1" />
</Association>
<Association Name="WrittenBy">
<End Type="BooksModel.Book" Role="Book" Multiplicity="*" />
<End Type="BooksModel.Author" Role="Author" Multiplicity="*" />
</Association>
</Schema>