复杂类型对象(实体框架)
复杂类型是实体类型的非标量属性,实体类型允许在实体内组织标量属性。 与实体相似,复杂类型由标量属性或者其他复杂类型属性组成。 因为复杂类型没有键,所以实体框架 不能脱离父对象来管理复杂类型对象。 有关更多信息,请参见ComplexType 元素 (CSDL)。
当 Entity Framework 工具生成表示实体类型的对象时,这些对象从 EntityObject 进行继承。 同样,为复杂类型生成的对象从 ComplexObject 继承。 这些类都继承自 StructuralObject 基类。 复杂类型对象的标量属性可像其他标量属性一样被访问。 有关更多信息,请参见如何:查询复杂类型(实体框架)。
使用表示复杂类型的对象时,请注意以下几点:
复杂类型属性不能为 null。 调用 SaveChanges 并且遇到 null 复杂对象时,将引发 InvalidOperationException。 与实体的标量属性一样,复杂对象的标量属性可以为 null。
复杂类型不能从其他复杂类型继承。
当在复杂类型对象图的任何位置更改任何属性时,父类型的属性将被标记为已更改,并在调用 SaveChanges 时更新复杂类型对象图中的所有属性。
若对象层是由实体数据模型 工具生成的,则复杂对象将在访问复杂类型属性而不是实例化父对象时进行实例化。
在使用包含复杂类型属性的 POCO(“纯旧式”CLR 对象)类型时,下面的注意事项也适用:
必须将复杂类型定义为 class。
始终通过快照方法来检测对复杂类型实例的成员所做的更改。 有关更多信息,请参见跟踪 POCO 实体中的更改(实体框架)。
以下主题演示如何使用 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