我正在创建一个使用EF作为其数据访问权限的应用程序。
我的实体正在失去其状态,导致每当我保存一个新实体时,关系中的任何对象都被标记为新的并尝试插入。
如何在每次WCF调用时为DbContext实例一次,这样我就可以在整个服务调用中使用相同的上下文并防止它被处理掉,让我的实体处于不一致状态?
我曾经在Web应用程序中将上下文存储在HttpContext中,但在WCF中没有HttpContext这样的东西。
我可以在哪里存储,以便每次通话使用?
谢谢!
答案 0 :(得分:0)
您可以在WCF中使用HttpContext。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
我通常使用structuremap的HybridHttpOrThreadLocalScoped将我的DbContext缓存在HttpContext中:
For<IDbContext>().HybridHttpOrThreadLocalScoped().Use(() => new MyDbContext());
这可以使用HttpContext.Current.Items
手动完成。
我认为它可以在纯WCF中以不同方式完成,但可以使用aspNetCompatibilityEnabled - imo。
干杯!