Это продолжение двух текущих проблем, с которыми я сталкиваюсь: Проблемы с попыткой присоединить новый объект EF4 к ObjectContext, в то время как его объекты коллекции объектов уже подключены и EF4.0 - Есть ли способ узнать, какие сущности прикреплены к какому ObjectContext во время отладки? Я использую это пространство, чтобы задать еще один довольно сложный вопрос, и я не хочу делать огромный, очень длинный вопрос из моих других потоков.
Итак, краткое изложение:
У меня есть входящие данные формы, которые связаны с DTO. Я хочу отобразить DTO на Entity (игровую сущность). Проблема заключается в том, что Игра содержит коллекцию EntityCollection, которую я должен создать и добавить () в Игру на основе int [] в DTO (каждое целое число представляет идентификатор платформы). И, естественно, EF4 задыхается отчасти потому, что это отношение многие-ко-многим, но, я думаю, потому что происходят некоторые махинации с тем, сколько объектов 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. Я просто не уверен, как это сделать.
Есть ли стандартный способ сделать это?