ComplexType 元素 (CSDL)

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

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

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

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

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

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

特性名称 是否必需

Name

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

BaseType

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

Cc716799.note(zh-cn,VS.100).gif注意:
此特性不适用于由命名空间 https://schemas.microsoft.com/ado/2006/04/edm 指定的 CSDL 版本。在该版本中不支持复杂类型的继承。

Abstract

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

Cc716799.note(zh-cn,VS.100).gif注意:
此特性不适用于由命名空间 https://schemas.microsoft.com/ado/2006/04/edm 指定的 CSDL 版本。该版本中的复杂类型不能是抽象类型。

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

示例

下面的代码示例演示一个复杂类型 Address 以及 EdmSimpleType 属性 StreetAddressCityStateOrProvinceCountryPostalCode

<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 Entity Data Model Tools
complex type (Entity Data Model)