我有一个场景,我有一个需要运行的存储过程。这个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
}
}
答案 0 :(得分:3)
session.CreateSQLQuery(...).ExecuteUpdate();
将执行它并失败并出现异常。