Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 回滚事务_C#_Sql Server_Entity Framework_Tsql_Ef Code First - Fatal编程技术网

C# 回滚事务

C# 回滚事务,c#,sql-server,entity-framework,tsql,ef-code-first,C#,Sql Server,Entity Framework,Tsql,Ef Code First,我有下一个代码: C# Database.ExecuteSqlCommand("sp_myProc") SQL procedure sp_myProc begin try begin tran insert.... delete.... commit tran end try begin catch goto error; end catch

我有下一个代码:

C#

Database.ExecuteSqlCommand("sp_myProc")

SQL



 procedure sp_myProc
    begin try
       begin tran
              insert....
              delete....
       commit tran
    end try
    begin catch
         goto error;
    end catch

    error:
        if @@trancount > 0
           rollback tran 
由于
ExecuteSqlCommand
还打开了一个mient事务和
@@trancount
出现错误时,回滚所有事务,包括来自
ExecuteSqlCommand
。EF生成错误:

“执行后的事务计数表示提交或回滚 “缺少事务语句”

我的问题1:我对当前错误的理解正确吗

my
问题2:如果我将存储过程sp_myProc更改为如下视图:

   set xact abort on;
   begin tran
          insert....
          delete....
   commit tran

我可以有哪些警告或错误?

除了启用XACT\U ABORT,还可以将条件回滚移到catch块。它不起作用-raise error“Message=”执行后的事务计数表示缺少COMMIT或rollback事务语句。上一次计数=1,当前计数=0。“看起来ExecuteSqlCommand为您启动了一个事务。事务处理应该由客户机或在proc中完成,但不能同时由客户机和proc完成。否则,进程中的回滚也将回滚客户端事务。是的,内部的ExecuteSqlCommand启动事务。我的问题是:如果我应用代码的第二个版本,我会有任何警告吗?使用ExecuteSqlCommand调用的proc中的任何事务处理的警告是,在回滚之后,您将得到tran count错误。那么,为什么进程中会有任何异常呢?除了将XACT_ABORT设置为ON,还将条件回滚移动到catch块。它不起作用-raise error“Message=”Transaction count after EXECUTE指示缺少COMMIT或rollback Transaction语句。上一次计数=1,当前计数=0。“看起来ExecuteSqlCommand为您启动了一个事务。事务处理应该由客户机或在proc中完成,但不能同时由客户机和proc完成。否则,进程中的回滚也将回滚客户端事务。是的,内部的ExecuteSqlCommand启动事务。我的问题是:如果我应用代码的第二个版本,我会有任何警告吗?使用ExecuteSqlCommand调用的proc中的任何事务处理的警告是,在回滚之后,您将得到tran count错误。那么,为什么程序中会有任何错误呢?