2011-10-11 84 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。

乾杯!