1

有没有办法实现您自己的类的实例,该类派生自模型中指定的实体类型?假设我的模型中有一个给定实体的“ClassName”属性,每当 EF 实现实体的实例时,我想创建指定 ClassName 的实例(当然这是实体的子类) .

我知道 ObjectContext 上有 ObjectMaterialized 事件,但此时实体已经创建。

var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objectContext.ObjectMaterialized += OnObjectMaterialized;

在此之前我需要一个钩子来自定义对象创建。你可能会问我到底为什么需要这样做。我有一个不断变化的大型对象模型,因此我无法在 EDMX 中定义我的所有类。我存储在数据库中的属性可以抽象为对象模型层次结构顶部的几个类。我打算为那些使用 table-per-type 继承的人创建实体。但是,如果我可以在使用 EF 时直接检索特定的对象实例,那就太棒了。

谢谢!

4

1 回答 1

1

我想创建自定义代理并深入调试实体框架。我找到了翻译器类,它负责通过反射创建实体。类的命名空间是System.Data.Entity.Core.Common.Internal.Materialization

创建实体的方法是私有方法Emit_ConstructEntity。实体类型是一个参数,由私有方法LookupObjectMapping基于 EdmType 对象创建(我首先使用的是模型)。

如果要更改已创建的类,则必须创建自定义 MetaDataWorkspace。工作区负责选择 EdmType。也许尝试自己调试方法并查看 MetaDataWorkspace 是如何用于识别 CLR 类型的。

于 2015-04-23T15:46:46.253 回答