2010-12-16 180 views
0

在asp.net網絡應用程序中使用最新的EF Code First CTP,我似乎遇到了一個問題。請原諒缺乏代碼(現在),但我會盡力解釋。EF Code First「Transactional Issue」

在我的控制器中,我通過DI容器注入一個存儲庫工廠和一個IDataContext。 IDataContext只是我的DbContext的一個接口,存儲庫工廠本身也會注入其中之一。

我的問題是,當從存儲庫(從工廠)檢索用戶,然後在使用(DataContext)塊內添加一些屬性 - 注入的IDataContext時,更改不會被保存。

如果我創建一個新用戶 - 工作正常。但是,當我將記錄添加到用戶的ICollection時,它們不會持續。

我創建了一個測試,使用一個DataContext來創建用戶,然後使用另一個DataContext(使用塊)來添加記錄。並且它工作正常(在這個create-dispose-create-dispose序列中)。

我的猜測是,在控制器,IDataContext的不同實例影響發送到數據庫的命令 - 甚至在此之前..

我應該有問題明天釘。但是,如果我無法找出問題,任何建議都會很好。

+0

我有類似的問題,像你有,但它更多的是關於事務變得空。我修復了它,它覆蓋了OnActionExecuting和設置事務值的Controller事件。 – paragy 2010-12-16 19:28:47

+0

您是否使用DbContext本身的實例作爲事務?或者你是否可能使DbContext成爲單例(如通過IoC綁定的Singleton,但仍然是「新起來」),並且在實例調用SaveChanges()時更新所有實例以反映數據庫的當前狀態? – nick 2010-12-16 20:14:37

回答

0

我設法解決它。基本上我只需要告訴DependencyResolver我的DbContext的實例是每個請求。

希望這可以節省一些麻煩一段時間。