属性

复杂类型是用于定义实体类型或其他复杂类型的丰富结构化属性的模板。 每个模板都包含以下内容:

  • 唯一的名称。 (必需)

    注释

    复杂类型的名称不能与同一命名空间中的实体类型名称相同。

  • 一个或多个 属性形式的数据。 (可选)。)

    注释

    复杂类型的属性可以是另一种复杂类型。

复杂类型类似于实体类型,因为复杂类型可以采用基元类型属性或其他复杂类型的形式携带数据有效负载。 但是,复杂类型和实体类型之间存在一些主要差异:

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

  • 复杂类型不能参与 关联。 关联的两端都不能是复杂类型,因此无法在复杂类型上定义 导航属性

示例:

ADO.NET Entity Framework 使用称为概念架构定义语言(CSDL)的特定于域的语言(DSL)来定义概念模型。 以下 CSDL 定义一个复杂类型 Address,具有基元类型属性 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 属性,必须在实体类型定义中声明属性类型。 以下 CSDL 将 Address 属性声明为实体类型上的复杂类型(发布者):

<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>

另请参阅