Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сложный тип — это шаблон для определения богатых структурированных свойств типов сущностей или других сложных типов. Каждый шаблон содержит следующее:
Уникальное имя. (Обязательно)
Замечание
Имя сложного типа не может совпадать с именем типа сущности в том же пространстве имен.
Данные в виде одного или нескольких свойств. (Необязательно.)
Замечание
Свойство сложного типа может быть другим сложным типом.
Сложный тип аналогичен типу сущности в том, что сложный тип может содержать полезные данные в виде свойств примитивного типа или других сложных типов. Однако существует ряд ключевых различий между сложными типами и типами сущностей:
Сложные типы не имеют идентичностей и поэтому не могут существовать отдельно. Сложные типы могут существовать только как свойства для типов сущностей или других сложных типов.
Сложные типы не могут участвовать в сопоставлениях. Ни конец ассоциации не может быть сложным типом, поэтому свойства навигации не могут быть определены для сложных типов.
Пример
В 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>