我有一個場景,我需要運行一個存儲過程。這個過程是一個先進的刪除觸摸約13個相互關聯的表格。但是,我也需要清除一些XML,但只有在proc成功時纔可以。這是我的第一個問題:如何確定proc是否成功用於CreateSQLQuery?一旦確定,我通過XML刪除作爲一個func。如果那失敗了,那麼我想把整個事情推回去。我的第二個問題是:如何對存儲過程進行回滾?如果我簡單地調用回滾,它會顯示數據仍然會被刪除。Nhibernate回滾和檢查事務與存儲過程的成功
public void DeleteWithCondition(int id, func<bool> condition)
{
using (var session = _factory.OpenSession())
using (var transaction = session.BeginTransaction())
{
session.CreateSQLQuery(string.Format("EXEC DeleteItem '{0}'", id));
//Logic to check success of stored proc
if (!condition())
transaction.Rollback(); //If logic fails, then roll back transaction
}
}
您需要確保存儲過程不會創建自己的事務。 – 2014-09-30 20:38:04