ComplexType 元素 (CSDL)
ComplexType 元素定义由 EdmSimpleType 属性或其他复杂类型组成的数据结构。有关 EdmSimpleType 的更多信息,请参见概念模型类型 (CSDL)。复杂类型可以是实体类型的属性或其他复杂类型的属性。复杂类型类似于复杂类型定义数据中的实体类型。但是,在复杂类型与实体类型之间仍存在着一些重要区别:
复杂类型没有标识(或键),因此不能独立存在。复杂类型只能作为实体类型或其他复杂类型的属性而存在。
复杂类型属性不能具有 null 值,但可以将复杂类型的每个标量属性设置为 null。
ComplexType 元素可以具有以下子元素(按所列顺序):
Documentation(零个或一个元素)
Property(零个或多个元素)
批注元素(零个或多个元素)
下表介绍可应用于 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>