复杂类型对象(实体框架)

复杂类型是实体类型的非标量属性,实体类型允许在实体内组织标量属性。 与实体相似,复杂类型由标量属性或者其他复杂类型属性组成。 因为复杂类型没有键,所以实体框架 不能脱离父对象来管理复杂类型对象。 有关更多信息,请参见ComplexType 元素 (CSDL)

当 Entity Framework 工具生成表示实体类型的对象时,这些对象从 EntityObject 进行继承。 同样,为复杂类型生成的对象从 ComplexObject 继承。 这些类都继承自 StructuralObject 基类。 复杂类型对象的标量属性可像其他标量属性一样被访问。 有关更多信息,请参见如何:查询复杂类型(实体框架)

使用表示复杂类型的对象时,请注意以下几点:

  • 复杂类型属性不能为 null。 调用 SaveChanges 并且遇到 null 复杂对象时,将引发 InvalidOperationException。 与实体的标量属性一样,复杂对象的标量属性可以为 null

  • 复杂类型不能从其他复杂类型继承。

  • 当在复杂类型对象图的任何位置更改任何属性时,父类型的属性将被标记为已更改,并在调用 SaveChanges 时更新复杂类型对象图中的所有属性。

  • 若对象层是由实体数据模型 工具生成的,则复杂对象将在访问复杂类型属性而不是实例化父对象时进行实例化。

在使用包含复杂类型属性的 POCO(“纯旧式”CLR 对象)类型时,下面的注意事项也适用:

以下主题演示如何使用 ADO.NET 实体数据模型设计器(可能为英文网页)完成涉及复杂类型的各种任务。

How to: Create and Modify Complex Types

How to: Add a Complex Type Property to an Entity

How to: Refactor Existing Properties into a Complex type Property

How to: Map Complex Type Properties to Table Columns

How to: Map a Function Import to a Complex Type

另请参见

概念

使用对象(实体框架)