Элемент ComplexType (язык CSDL)

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

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

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

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

Элемент ComplexType может иметь следующие дочерние элементы (в порядке перечисления):

В таблице ниже описываются атрибуты которые могут быть применены к элементу ComplexType.

Имя атрибута Необходимо Значение

Name

Да

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

BaseType

Нет

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

Cc716799.note(ru-ru,VS.100).gifПримечание
Этот атрибут неприменим в версии языка CSDL, указанной пространством имен https://schemas.microsoft.com/ado/2006/04/edm.В этой версии не поддерживается наследование для сложных типов.

Abstract

Нет

True или False (значение по умолчанию) в зависимости от того, является ли сложный тип абстрактным типом.

Cc716799.note(ru-ru,VS.100).gifПримечание
Этот атрибут неприменим в версии языка CSDL, указанной пространством имен https://schemas.microsoft.com/ado/2006/04/edm.Сложные типы в этой версии не могут быть абстрактными типами.

Cc716799.note(ru-ru,VS.100).gifПримечание
К элементу ComplexType может быть применено любое количество атрибутов annotation (настраиваемых атрибутов XML).Однако настраиваемые атрибуты не могут принадлежать к любому пространству имен XML, зарезервированному для CSDL.Полные имена любых двух настраиваемых атрибутов не могут совпадать.

Пример

В следующем примере показан сложный тип Address со свойствами EdmSimpleType, 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 (см. выше) как свойство типа сущности, необходимо объявить тип свойства в определении типа сущности. В следующем примере показано свойство 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>

См. также

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

Общие сведения о платформе Entity Framework
Спецификация языка CSDL
Элемент Schema (CSDL)
Элемент EntityType (язык CSDL)
Объекты сложных типов (платформа Entity Framework)

Другие ресурсы

Спецификации языка CSDL, SSDL и MSL
ADO.NET Entity Data Model Tools
complex type (Entity Data Model)