复杂类型对象(实体框架)
复杂类型是实体类型的非标量属性,实体类型允许在实体内组织标量属性。与实体相似,复杂类型由标量属性或者其他复杂类型属性组成。复杂类型不能在没有父实体或复杂类型的情况下存在。因为复杂类型没有键,所以对象服务不能脱离父对象来管理复杂类型对象。有关更多信息,请参见复杂类型 (EDM)。
当 Entity Framework 工具生成表示实体类型的对象时,这些对象从 EntityObject 进行继承。同样,为复杂类型生成的对象从 ComplexObject 继承。这些类都继承自 StructuralObject 基类。复杂类型对象的标量属性可像其他标量属性一样被访问。有关更多信息,请参见如何:使用复杂类型创建和执行对象查询(实体框架)。
使用表示复杂类型的对象时,请注意以下几点:
复杂类型属性不能为 null。调用 SaveChanges 并且遇到 null 复杂对象时,将引发 InvalidOperationException。与实体的标量属性一样,复杂对象的标量属性可以为 null。
复杂类型不能从其他复杂类型继承。
当在复杂类型对象图的任何位置更改任何属性时,父类型的属性将被标记为已更改,并在调用 SaveChanges 时更新复杂类型对象图中的所有属性。
继承自 ComplexObject 的复杂对象在访问复杂类型属性而不是实例化父对象时进行实例化。
自定义数据类继承自 EntityObject 时,复杂类型类必须继承自 ComplexObject。
实现自定义数据类接口(例如 IEntityWithKey)时可以使用复杂类型。但是,将复杂类型用于自定义数据类的建议做法是从 EntityObject 和 ComplexObject 继承。有关更多信息,请参见自定义对象(实体框架)。