EF DbContext в службах WCF

#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.

Приветствия!