C# Nhibernate使用存储过程回滚并检查事务是否成功
我有一个场景,其中需要运行一个存储过程。这个过程是一个高级的删除操作,涉及13个相互关联的表。但是,我还需要清除一些XML,但前提是该过程成功。这是我的第一个问题:如何确定CreateSQLQuery的过程是否成功?一旦确定,我将把XML delete作为func传递进来。如果失败了,那么我想回滚整个过程?如果我简单地调用回滚,数据似乎仍在删除C# Nhibernate使用存储过程回滚并检查事务是否成功,c#,sql,nhibernate,stored-procedures,C#,Sql,Nhibernate,Stored Procedures,我有一个场景,其中需要运行一个存储过程。这个过程是一个高级的删除操作,涉及13个相互关联的表。但是,我还需要清除一些XML,但前提是该过程成功。这是我的第一个问题:如何确定CreateSQLQuery的过程是否成功?一旦确定,我将把XML delete作为func传递进来。如果失败了,那么我想回滚整个过程?如果我简单地调用回滚,数据似乎仍在删除 public void DeleteWithCondition(int id, func<bool> condition) {
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
}
}
public void DeleteWithCondition(int-id,func-condition)
{
使用(var session=\u factory.OpenSession())
使用(var transaction=session.BeginTransaction())
{
CreateSQLQuery(string.Format(“EXEC DeleteItem'{0}',id));
//检查存储过程成功的逻辑
如果(!条件())
transaction.Rollback();//如果逻辑失败,则回滚事务
}
}
会话。CreateSQLQuery(…).ExecuteUpdate()
将执行它,如果数据库这样说,则会异常失败。会话。CreateSQLQuery(…).ExecuteUpdate()
将执行它,如果数据库这样说,则会异常失败。会话。CreateSQLQuery(…).ExecuteUpdate()
将执行它,如果数据库这样说,则会异常失败。会话。CreateSQLQuery(…).ExecuteUpdate()
将执行它,如果数据库这样说,则会异常失败。您需要确保存储过程不创建自己的事务。您需要确保存储过程不创建自己的事务。您需要确保存储过程不创建自己的事务。您需要确保存储过程不创建自己的事务。您需要确保存储过程不创建自己的事务。