這是我正面臨的兩個持續性問題的延續: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