【发布时间】:2011-06-07 04:43:08
【问题描述】:
这是我面临的两个持续存在的问题的延续:Problems trying to attach a new EF4 entity to ObjectContext while its entity collection entities are already attached 和 EF4.0 - Is there a way to see what entities are attached to what ObjectContext during debugging? 我正在利用这个空间提出另一个有点复杂的问题,我不想提出一个巨大的、超长的问题在我的其他线程之外。
所以,简要介绍一下:
我有绑定到 DTO 的传入表单数据。我想将 DTO 映射到实体(游戏实体)。问题是游戏包含一个 EntityCollection,我必须根据 DTO 中的 int[] 创建并 Add() 到游戏中(每个整数代表平台的 ID)。当然,EF4 令人窒息的部分原因是它是多对多的关系,但我认为,还有一些关于有多少 ObjectContext 对象在起作用的恶作剧。我不断收到一个异常,声称我无法将检索到的平台实体添加到我的新游戏实体中,因为它们属于两个不同的 ObjectContext。鉴于我目前的设置,我看不出这是怎么可能的,但我不确定还有什么问题。
好的,所以我有三个存储库,我通过 Ninject 接口注入将它们注入到我的控制器中。我像这样在每个中创建 ObjectContexts:
public class HGGameRepository : IGameRepository
{
private HGEntities _siteDB = new HGEntities();
// rest of repo
}
其他两个存储库的构建方式相同。
我的 Ninject DI 代码相当简单:
private class HandiGamerServices : NinjectModule
{
public override void Load()
{
Bind<IArticleRepository>().To<HGArticleRepository>().InRequestScope();
Bind<IGameRepository>().To<HGGameRepository>().InRequestScope();
Bind<INewsRepository>().To<HGNewsRepository>().InRequestScope();
Bind<ErrorController>().ToSelf().InRequestScope();
}
}
根据我的阅读,这应该为每个 HTTP 请求创建一次这些绑定。
我想做的是让我的 HGEntities 对象的一个实例在所有存储库之间共享,以确保我有一个且只有一个 ObjectContext 可以使用。我只是不确定该怎么做。
有标准的方法吗?
【问题讨论】:
-
我在使用带有 Ninject 的 DbContext 时遇到了类似的问题。我必须手动处理 DbContext 以完全释放底层 ObjectContext,然后才能对其进行任何操作(我什至检查对象是否已附加到 DbContext 并且它返回 false)。不过,不确定这是否适用于您的场景。
标签: c# entity-framework-4 ninject ninject-2