2014-09-29 52 views
0

我有一個場景,我需要運行一個存儲過程。這個過程是一個先進的刪除觸摸約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 

     } 
    } 
+0

您需要確保存儲過程不會創建自己的事務。 – 2014-09-30 20:38:04

回答

2

session.CreateSQLQuery(...).ExecuteUpdate();將執行它,並失敗,如果數據庫說明如此。

+0

一句話回答。但確切地說...... – 2014-09-30 14:01:20