我想我可能會讓我的工作單元在我的架構中設置錯誤。這裏是我現在有的(縮進顯示順序):NHibernate中的工作單元和每個請求的會話數
HttpRequest.Begin()
UnitOfWork.Begin()
Session.BeginTransaction(System.Data.IsolationLevel.ReadCommitted);
在這裏,我打電話給各種服務使用NHibernate執行crud。當我要做出改變的數據庫(更新/保存),我把這段代碼:
using (var transaction = unitOfWork.Session.BeginTransaction())
{
try
{
// These are just generics
ret = (Key)unitOfWork.Session.Save(entity);
transaction.Commit();
rb.unitOfWork.Session.Clear();
}
catch
{
transaction.Rollback();
rb.unitOfWork.Session.Clear();
rb.unitOfWork.DiscardSession();
throw;
}
}
當的HttpRequest結束後,我執行以下步驟:
UnitOfWork.Commit()
Transaction.Commit() // This is my sessions transaction from the begin above
我遇到能夠回滾大批量流程的問題。因爲我在我的CRUD層中提交事務,如上所示,我的事務不再處於活動狀態,當我嘗試在我的UnitOfWork中回滾時,由於事務已經提交,它不做任何事情。我在我的CRUD層中提交代碼的原因是,我可以儘可能快地保留數據,而不會將數據庫鎖定時間過長。
採取類似上述情況的最佳行動方案是什麼?我是否只做了特殊的CRUD操作,它不會提交批量作業,只是在作業結束時處理提交,還是我的邏輯只是出現了UnitOfWork和Session Per Request錯誤?有什麼建議麼?
迄今爲止找到的最簡單完整的解釋! – Joel