【发布时间】: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