【问题标题】:Nhibernate Rollback and Check success of Transaction with Stored Procedure休眠回滚并使用存储过程检查事务是否成功
【发布时间】:2014-09-29 14:04:50
【问题描述】:

我有一个需要运行的存储过程的场景。这个过程是一个高级删除,涉及大约 13 个相互关联的表。但是,我还需要清除一些 XML,但前提是 proc 成功。这是我的第一个问题:如何确定 proc 对于 CreateSQLQuery 是否成功?一旦确定,我将 XML 删除作为函数传递。如果失败了,那么我想回滚整个事情。我的第二个问题是:我如何对存储过程进行回滚?如果我只是调用回滚,它会显示数据仍然删除。

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

        }
    }

【问题讨论】:

  • 您需要确保存储过程不会创建自己的事务。

标签: c# sql nhibernate stored-procedures


【解决方案1】:

session.CreateSQLQuery(...).ExecuteUpdate(); 将执行它,如果数据库这样说,则会失败并抛出异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多