使用Web API TransactionScope和SQL Server内存表问题

Ask*_*Ali 5 stored-functions asp.net-web-api2 in-memory-tables

每当我通过Web API访问具有内存表的存储过程TransactionScope时,都会出现此错误:

当前事务无法提交,并且不能支持写入日志文件的操作。回滚事务。当前事务无法提交,并且不能支持写入日志文件的操作。回滚事务。当前事务无法提交,并且不能支持写入日志文件的操作。回滚事务。在批处理结束时检测到不可提交的事务。交易回滚

我试图直接在SQL Server Management Studio中执行相同的存储过程,并且工作正常。

另外,当我TransactionScope从Web API中删除时,它也可以正常工作。但是我想TransactionScope在Web API内使用

在存储过程中,我有以下内容:

SET NOCOUNT ON;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
BEGIN TRY
 SELECT ITEMID FROM SAMPLE_IN_MEMORY_TABLE
           ----
END TRY
BEGIN CATCH
--
END CATCH
Run Code Online (Sandbox Code Playgroud)

在Web API内部,按照以下方式使用存储过程

QueriesTableAdapter qa = new QueriesTableAdapter();

using (TransactionScope scope = new TransactionScope())
{
      qa.SpSampleInMemoeryAccess(g_OutParameter64);

      if (g_OutParameter64 > 0)
      {
          scope.Complete();
          Status = true;             
      }
      else
      {
          Status = false;
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

小智 0

您正在事务中间更改隔离级别。

TransactionScope 的默认隔离级别是SERIALIZABLE,但在存储过程中,您将其更改为 READ UNCOMMITTED (!!!希望您知道自己在做什么)。

任何一个:

  1. 不要在存储过程中设置隔离级别
  2. 在 TransactionScope 构造函数中指定隔离级别 READ UNCOMMITTED。