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


сложный тип

Сложный тип — это шаблон для определения богатых структурированных свойств типов сущностей или других сложных типов. Каждый шаблон содержит следующие сведения.

  • Уникальное имя. (обязательно)

    Примечание.

    Имя сложного типа не может быть таким же, что и имя типа сущности внутри одного и того же пространства имени.

  • Данные в виде одного или нескольких свойств. (Необязательно.)

    Примечание.

    Свойство сложного типа может быть другим сложным типом.

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

  • Сложные типы не имеют идентификаторов и поэтому не могут существовать независимо. Сложные типы могут существовать только как свойства типов сущностей или других сложных типов.

  • Сложные типы не могут участвовать в сопоставлениях. Ни конец ассоциации не может быть сложным типом, поэтому свойства навигации не могут быть определены для сложных типов.

Пример

В ADO.NET Entity Framework используется язык, зависящий от домена (DSL), называемый языком определения концептуальной схемы (CSDL) для определения концептуальных моделей. Далее на языке CSDL определяется сложный тип, адрес со свойствами примитивного типа StreetAddress, City, StateOrProvince, Country и PostalCode.

<ComplexType Name="Address" >
  <Property Type="String" Name="StreetAddress" Nullable="false" />
  <Property Type="String" Name="City" Nullable="false" />
  <Property Type="String" Name="StateOrProvince" Nullable="false" />
  <Property Type="String" Name="Country" Nullable="false" />
  <Property Type="String" Name="PostalCode" Nullable="false" />
</ComplexType>

Чтобы определить сложный тип Address (показанный выше) как свойство типа сущности, необходимо объявить тип свойства в определении типа сущности. Далее на языке CSDL объявляется свойство Address в виде сложного типа в типе сущности (издателе).

<EntityType Name="Publisher">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Type="Int32" Name="Id" Nullable="false" />
      <Property Type="String" Name="Name" Nullable="false" />
      <Property Type="BooksModel.Address" Name="Address" Nullable="false" />
      <NavigationProperty Name="Books" Relationship="BooksModel.PublishedBy"
                          FromRole="Publisher" ToRole="Book" />
    </EntityType>

См. также