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


Основные понятия модели данных сущностей

Модель данных сущности (EDM) использует три ключевых понятия для описания структуры данных: типа сущности, типа связи и свойства. Это наиболее важные понятия в описании структуры данных в любой реализации EDM.

Тип сущности

Тип сущности является основным стандартным блоком для описания структуры данных с помощью модели данных сущности. В концептуальной модели типы сущностей создаются из свойств и описывают структуру концепций верхнего уровня, таких как клиенты и заказы в бизнес-приложении. Таким же образом, как определение класса в компьютерной программе является шаблоном для экземпляров класса, тип сущности является шаблоном для сущностей. Сущность представляет конкретный объект (например, конкретный клиент или заказ). Каждая сущность должна иметь уникальный ключ сущности в наборе сущностей. Набор сущностей — это коллекция экземпляров определенного типа сущности. Наборы сущностей (и наборы ассоциаций) логически группируются в контейнер сущностей.

Наследование поддерживается с типами сущностей: то есть один тип сущности может быть производным от другого. Дополнительные сведения см. в разделе "Модель данных сущности: наследование".

Тип связи

Тип ассоциации (также называемый ассоциацией) является основным стандартным блоком для описания связей в модели данных сущностей. В концептуальной модели ассоциация представляет собой отношения между двумя типами сущностей (такими как Клиент и Заказ). Каждая ассоциация имеет два конца ассоциации, указывающих типы сущностей, участвующих в ассоциации. Каждый конец ассоциации также указывает кратность конца ассоциации , указывающую количество сущностей, которые могут находиться в этом конце связи. Кратность конца связи может иметь значение одного (1), ноль или один (0..1) или многие (*). Сущности на одном конце ассоциации можно получить через свойства навигации или через внешние ключи, если они определены в типе сущности. Дополнительные сведения см. в свойстве внешнего ключа.

В приложении экземпляр ассоциации представляет конкретную ассоциацию (например, ассоциацию между экземпляром клиента и экземплярами заказа). Экземпляры ассоциации логически группируются в наборе ассоциаций. Наборы ассоциаций (и наборы сущностей) логически группируются в контейнер сущностей.

Недвижимость

Типы сущностей содержат свойства , определяющие их структуру и характеристики. Например, тип сущности Customer может иметь такие свойства, как CustomerId, Name и Address.

Свойства в концептуальной модели аналогичны свойствам, определенным в классе в компьютерной программе. Таким же образом, как свойства класса определяют форму класса и содержат сведения об объектах, свойства в концептуальной модели определяют форму типа сущности и содержат сведения о экземплярах типов сущностей.

Свойство может содержать примитивные данные (например, строку, целое число или логическое значение) или структурированные данные (например, сложный тип). Дополнительные сведения см. в разделе "Модель данных сущности: примитивные типы данных".

Представления концептуальной модели

Концептуальная модель — это определенное представление структуры некоторых данных в виде сущностей и связей. Одним из способов представления концептуальной модели является схема. На следующей схеме представлена концептуальная модель с тремя типами сущностей (, Bookи двумя ассоциациями) (PublisherAuthorи PublishedByWrittenBy):

Схема, показывающая концептуальную модель с тремя типами сущностей.

Однако это представление имеет некоторые недостатки, когда дело доходит до передачи некоторых сведений о модели. Например, сведения о типе свойств и наборе сущностей не передаются на схеме. Богатство концептуальной модели можно передать более четко с помощью языка для конкретного домена (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>

См. также