2
我使用AutoFac在我的Web應用程序中注入一個具體的數據上下文。如果頁面上沒有例外,我希望在請求結束時執行數據庫上下文的SaveChanges()
方法。否則,我只是想正常處理上下文。使用AutoFac OnRelease保存DbContext更改?
我注意到AutoFac有一個OnRelease
方法。該方法的智能感知狀態爲:
運行提供的操作,而不是在實例不再需要時處置實例。
因此,我想在做這樣的事情的:
builder.RegisterType<MyContext>().As<IDbContext>().InstancePerHttpRequest()
.OnRelease(x => {
if (HttpContext.Current != null && HttpContext.Current.Error == null)
x.SaveChanges();
if (x != null)
{
x.Dispose();
x = null;
}
});
這是一個合適的位置提交的數據環境的變化?即使發生異常,它是否可以保證在每個請求上運行?
Alexandr,謝謝你的回答。在需要時,我可以靈活地在代碼中調用SaveChanges()。另外,我不能在try/catch/finally塊中包裝'SaveChanges()',就像我在其他代碼中處理您對處置的擔心一樣嗎? – Sam
@Sam「我需要時可以靈活地在代碼中調用SaveChanges()。」你爲什麼要結合這兩種方法?它導致錯誤。 「我無法將SaveChanges()包裝在try/catch/finally塊中」是的,它會工作,但...... :) –