Элемент ComplexType (язык CSDL)
Элемент ComplexType определяет структуру данных, составленную из свойств EdmSimpleType или других сложных типов. Дополнительные сведения о компоненте EdmSimpleType см. в разделе Типы концептуальной модели. Сложный тип может быть свойством типа сущности или другого сложного типа. Сложный тип аналогичен типу сущности, поскольку также определяет данные. Однако между сложными типами и типами сущности существуют некоторые ключевые различия.
Сложные типы не имеют идентификаторов (или ключей) и поэтому не могут существовать независимо. Сложные типы могут существовать только как свойства типов сущностей или других сложных типов.
Сложные типы не могут участвовать в сопоставлениях. Ни один элемент ассоциации не может быть сложным типом. Поэтому для сложных типов не могут быть определены свойства навигации.
Свойство сложного типа не может иметь значение null, хотя каждое скалярное свойство сложного типа может быть установлено в это значение.
Элемент ComplexType может иметь следующие дочерние элементы (в порядке перечисления):
Documentation (ноль или один элемент)
Property (ноль или больше элементов)
Элементы Annotation (ноль или более элементов)
В таблице ниже описываются атрибуты которые могут быть применены к элементу ComplexType.
Имя атрибута | Необходимо | Значение |
---|---|---|
Name |
Да |
Имя сложного типа. Имя сложного типа не может совпадать с именем другого сложного типа, типа сущности или ассоциации, которые находятся в области модели. |
BaseType |
Нет |
Имя другого сложного типа, который является базовым типом определяемого сложного типа. ![]()
Этот атрибут неприменим в версии языка CSDL, указанной пространством имен https://schemas.microsoft.com/ado/2006/04/edm.В этой версии не поддерживается наследование для сложных типов.
|
Abstract |
Нет |
True или False (значение по умолчанию) в зависимости от того, является ли сложный тип абстрактным типом. ![]()
Этот атрибут неприменим в версии языка CSDL, указанной пространством имен https://schemas.microsoft.com/ado/2006/04/edm.Сложные типы в этой версии не могут быть абстрактными типами.
|
![]() |
---|
К элементу 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)