ComplexType 元素 (CSDL)

ComplexType 元素定义由 EdmSimpleType 属性或其他复杂类型组成的数据结构。有关 EdmSimpleType 的更多信息,请参见概念模型类型 (CSDL)。复杂类型可以是实体类型的属性或其他复杂类型的属性。复杂类型类似于复杂类型定义数据中的实体类型。但是,在复杂类型与实体类型之间仍存在着一些重要区别:

  • 复杂类型没有标识(或键),因此不能独立存在。复杂类型只能作为实体类型或其他复杂类型的属性而存在。

  • 复杂类型不能参与关联。关联的任一端都不能是复杂类型,因此不能为复杂类型定义导航属性

  • 复杂类型属性不能具有 null 值,但可以将复杂类型的每个标量属性设置为 null。

ComplexType 元素可以具有以下子元素(按所列顺序):

下表介绍可应用于 ComplexType 元素的特性。

特性名

是否必需

Name

复杂类型的名称。复杂类型的名称不能与模型作用域中的其他复杂类型、实体类型或关联的名称相同。

BaseType

作为所定义的复杂类型的基类型的另一个复杂类型的名称。

注意注意
此特性不适用于由命名空间 https://schemas.microsoft.com/ado/2006/04/edm 指定的 CSDL 版本。在该版本中不支持复杂类型的继承。

Abstract

True 或 False(默认值),具体取决于复杂类型是否为抽象类型。

注意注意
此特性不适用于由命名空间 https://schemas.microsoft.com/ado/2006/04/edm 指定的 CSDL 版本。该版本中的复杂类型不能是抽象类型。

备注

可以将任何数量的批注特性(自定义 XML 特性)应用于 ComplexType 元素。然而,自定义特性可能不属于为 CSDL 保留的任何 XML 命名空间。任何两个自定义特性的完全限定名称都不能相同。

示例

下面的代码示例演示一个复杂类型 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>

请参阅

概念

实体框架概述

CSDL 规范

Schema 元素 (CSDL)

复杂类型

EntityType 元素 (CSDL)

其他资源

CSDL、SSDL 和 MSL 规范

ADO.NET 实体数据模型工具

复杂类型对象