2011-10-11 86 views
1

我正在创建一个使用EF作为其数据访问权限的应用程序。WCF服务中的EF DbContext

我的实体正在失去其状态,导致每当我保存一个新的实体时,关系中的任何对象都会被标记为新的并尝试插入。

如何为每个WCF调用实例化我的DbContext一次,以便在整个服务调用中使用相同的上下文,并防止它被丢弃并让我的实体处于不一致的状态?

我曾经在HttpContext中存储上下文,当我做了web应用程序,但在WCF中没有像HttpContext这样的东西。

我可以在哪里存储它,以便每次调用?

谢谢!

回答

0

您可以在WCF中使用HttpContext。

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

我通常使用缓存structuremap的HybridHttpOrThreadLocalScoped我在的HttpContext的DbContext:

For<IDbContext>().HybridHttpOrThreadLocalScoped().Use(() => new MyDbContext()); 

这可以使用HttpContext.Current.Items手动完成。

我想可以在纯WCF中完成不同的操作,但可以使用aspNetCompatibilityEnabled - imo。

干杯!