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


.

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

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

    Замечание

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

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

    Замечание

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

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

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

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

Пример

В 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 свойство как сложный тип для типа сущности (Publisher):

<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>

См. также