gpt4 book ai didi

entity-framework - 自定义实体具体化

转载 作者:行者123 更新时间:2023-12-03 07:29:00 25 4
gpt4 key购买 nike

有没有办法使用 EF6 注入(inject)自定义对象实例创建器?我需要做的是在矩阵化发生之前向 EF 提供实体实例。

基本上,我希望能够使用非无参数构造函数定义 POCO 实体,以便能够使用 DI 聚合,最终使用 EF 进行持久化。

我可以使用 ObjectMaterialized 事件实现类似的效果:

var oc = ( this as IObjectContextAdapter ).ObjectContext;
oc.ObjectMaterialized += ( s, e ) =>
{
//resolve and inject dependencies here using e.g. public properties
};

但我真的很喜欢在构造函数上声明依赖项。

有什么想法吗?干杯,.m

最佳答案

使用默认的 ObjectContext,在查看 EF 代码后我认为这是不可能的。最终对象是由ObjectContext.CreateObject创建的。这会执行以下两件事之一:它要么调用默认构造函数,要么如果启用了代理创建,则它会创建相关的代理类型。代理类型用于增强更改跟踪和延迟加载属性。

但是,ObjectContext.CreateObject 是虚拟的,因此可以在派生类中重写它。该派生类将提供对容器(或生命周期范围)的引用,然后在重写的 CreateObject 调用中,这将用于解析实体。

问题就变成了,如何将派生类型指定为 ObjectContext 以用于 DbContext?嗯,有a constructor that takes an instance of the ObjectContext应该使用DbContext

这就是我的想法开始有点偏离轨道的地方,因为 ObjectContext 本身需要 to be told关于它在连接字符串中使用的模型。我认为这可能意味着代码优先方法不起作用,因为模型是延迟创建的,因此在构建 DbContext 之前不可用。但是,对于模型优先方法,也许这可行?

关于entity-framework - 自定义实体具体化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14412552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com