这是我正面临的两个持续性问题的延续: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?我正在使用此空间来询问另一个有点复杂的问题,而且我不想做出巨大的,超长的问题摆脱了我的其他线索。EF4.0,知识库和Ninject 2
因此,简要介绍:
我有一个绑定到DTO进来的表单数据。我想将DTO映射到一个实体(一个游戏实体)。起皱的是,游戏包含一个EntityCollection,我必须根据DTO中的int []创建和添加()到游戏中(每个整数代表平台的ID)。当然,EF4窒息的部分原因是它是多对多的关系,而且我认为,因为有一些诡计正在进行着多少个ObjectContext对象的发挥。我不断收到一个异常声明,我无法将检索到的Platform实体添加到我的新游戏实体中,因为它们属于两个不同的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)。不知道这是否适用于您的情况。 – 2011-06-06 20:41:52