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


Основные понятия модели EDM

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

Тип сущности

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

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

Тип ассоциации

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

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

Свойство

Типы сущностей содержат свойства, которые определяют их структуру и характеристики. Например, тип сущности «Клиент» может иметь свойства, такие как идентификатор клиента, имя и адрес.

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

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

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

Концептуальная модель является специфическим представлением структуры некоторых данных в виде сущностей и связей. Одним из способов представления концептуальной модели является схема. На приведенной ниже схеме представлена концептуальная модель с тремя типами сущностей (Book, Publisher и Author) и двумя ассоциациями (PublishedBy и WrittenBy).

Модель со свойствами навигации

Это представление, однако, имеет недостатки в плане более подробных сведений о модели. Например, информация о типе свойства или наборе сущностей не содержится в схеме. Структура концептуальной модели может быть передана более точно при помощи доменного языка (DSL). Платформа ADO.NET Entity Framework использует доменный язык (DSL) на основе XML, называемый языком CSDL (CSDL), для определения концептуальных моделей. Далее на языке CSDL определяется концептуальная модель из приведенной выше схемы.

  <Schema xmlns="https://schemas.microsoft.com/ado/2008/09/edm"
          xmlns:cg="https://schemas.microsoft.com/ado/2006/04/codegeneration"
          xmlns:store="https://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>

См. также

Основные понятия

модель Entity Data