#wcf #entity-framework
#wcf #entity-framework
Вопрос:
Я создаю приложение, которое использует EF в качестве своего orm доступа к данным.
Мои объекты теряют свое состояние, в результате чего всякий раз, когда я сохраняю новую сущность, любые объекты в отношениях помечаются как новые и также пытаются быть вставленными.
Как мне создать экземпляр моего DbContext один раз для каждого вызова WCF, чтобы я использовал один и тот же контекст во всем вызове службы и предотвратил его удаление и позволил моим объектам находиться в несогласованном состоянии?
Раньше я сохранял контекст в HttpContext, когда создавал веб-приложения, но в WCF нет такого понятия, как HttpContext.
Где я могу его сохранить, чтобы он использовался для каждого вызова?
Спасибо!
Ответ №1:
Вы можете использовать HttpContext в WCF.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
Обычно я кэширую свой DbContext в HttpContext, используя HybridHttpOrThreadLocalScoped от structuremap:
For<IDbContext>().HybridHttpOrThreadLocalScoped().Use(() => new MyDbContext());
Это можно сделать вручную с помощью HttpContext.Current.Items
.
Я полагаю, что это можно было бы сделать по-другому в чистом WCF, но можно использовать aspNetCompatibilityEnabled — imo.
Приветствия!