Nhibernate回滚并使用存储过程检查事务的成功

时间:2014-09-29 14:04:50

标签: c# sql nhibernate stored-procedures

我有一个场景,我有一个需要运行的存储过程。这个proc是一个高级删除,触及13个相互关联的表格。但是,我还需要清除一些XML,但前提是proc成功。这是我的第一个问题:如何判断proc是否对CreateSQLQuery成功?确定后,我将XML删除作为func传递。如果失败了,那么我想回滚整个事情。我的第二个问题是:如何对存储过程进行回滚?如果我只是调用回滚,那么看起来就是数据仍然删除。

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

        }
    }

1 个答案:

答案 0 :(得分:3)

如果数据库这样说,

session.CreateSQLQuery(...).ExecuteUpdate();将执行它并失败并出现异常。