执行策略“SqlServerRetryingExecutionStrategy”不支持用户启动的事务

2023-12-19

我有一个 ASP.NET Core 5 MVC Web 应用程序,使用 Entity Framework Core 5。

我们实现 Web 组件,例如网格或电子表格(我们与 Telerik 合作)。当我在组件中进行一些更改,然后尝试保存更改时,组件会调用我的ApplicationDbContext.SaveChanges。然后我收到以下错误:

系统无效操作异常:配置的执行策略“SqlServerRetryingExecutionStrategy”不支持用户启动的事务。使用“DbContext.Database.CreateExecutionStrategy()”返回的执行策略将事务中的所有操作作为可重试单元执行。

这是我的方法ConfigureServices对于数据库上下文:

public static void AddDbContext(this IServiceCollection services, string connectionString) =>
    services.AddDbContext<ApplicationDbContext>(options =>
    {
        options.UseSqlServer(connectionString,
            providerOptions =>
            {
                providerOptions
                    .EnableRetryOnFailure(
                        maxRetryCount: 5, 
                        maxRetryDelay: TimeSpan.FromSeconds(30),
                        errorNumbersToAdd: null)
                    .UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery);
            });
        options.EnableSensitiveDataLogging();
        options.ConfigureWarnings(w => w.Throw(RelationalEventId.MultipleCollectionIncludeWarning));
    });

该错误不会系统地发生。当然,当我尝试将多个元素保存到数据库时。而且当只有一个元素时也是如此。当我以经典形式逐一编辑或相同元素时不会发生,只有当它发生在多个对象场景(网格或电子表格)中时...

The StackTrace would be like this: enter image description here

例如,我给出了一个允许提交的方法Entreprise对象,从电子表格到数据库,以便使用CreateExecutionStrategy method:

public ActionResult Data_Source_Entreprises_Submit(SpreadsheetSubmitViewModel model)
{
    var result = new SpreadsheetSubmitViewModel()
    {
        Created = new List<SpreadsheetEntrepriseViewModel>(),
        Updated = new List<SpreadsheetEntrepriseViewModel>(),
        Destroyed = new List<SpreadsheetEntrepriseViewModel>()
    };

    if ((model.Created != null || model.Updated != null || model.Destroyed != null) && ModelState.IsValid)
    {
        /*             executionStrategy                                 */
        var executionStrategy = _dbContext.Database.CreateExecutionStrategy();

        executionStrategy.Execute(() =>
            {
                using (var transaction = _dbContext.Database.BeginTransaction())
                {
                    try
                    {
                        ///////// Business Logic //////////////////
                        if (model.Created != null)
                        {
                            foreach (var created in model.Created)
                            {
                                EntrepriseDTO dto = new EntrepriseDTO() { Nom = created.Nom };
                                var createdDto = _entrepriseService.Create(dto);
                                created.Id = createdDto.Id;
                                result.Created.Add(created);
                            }
                        }

                        if (model.Updated != null)
                        {
                            foreach (var updated in model.Updated)
                            {
                                var spec = new EntrepriseForDetailsSpecification(updated.Id);
                                var dto = _entrepriseService.Read(spec);
                                dto.Nom = updated.Nom;
                                _entrepriseService.Update(dto);
                                result.Updated.Add(updated);
                            }
                        }

                        if (model.Destroyed != null)
                        {
                            foreach (var destroyed in model.Destroyed)
                            {
                                _entrepriseService.Delete(destroyed.Id);
                                result.Destroyed.Add(destroyed);
                            }
                        }
                        ///////// END Business Logic ///////////////

                        transaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                    }
                }
            }
        );
        /*             END executionStrategy                   */
        
        return Json(result);
    }
    else
    {
        return StatusCode(400, "The models contain invalid property values.");
    }
}

结果我遇到了以下错误:

连接不支持 MultipleActiveResultSets

然后我修改了连接字符串,包括MultipleActiveResultSets=True,但最后又得到了另一个错误:

在上一个操作之前,在此上下文中启动了第二个操作 操作完成。这通常是由不同线程引起的 同时使用 DbContext 的同一实例。了解更多 有关如何避免 DbContext 的线程问题的信息,请参阅https://go.microsoft.com/fwlink/?linkid=2097913 https://go.microsoft.com/fwlink/?linkid=2097913.

我没有在该代码中使用异步代码,我不知道出了什么问题......


我需要验证我的所有存储库异步调用,并查看是否所有调用都已“等待”。

我发现一个没有“等待”的...修复允许我将对象从数据库中的网格(或电子表格)保存。更多信息请参见 MS 文档EF Core 异步编程 https://learn.microsoft.com/en-us/ef/core/miscellaneous/async...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

执行策略“SqlServerRetryingExecutionStrategy”不支持用户启动的事务 的相关文章

  • Python 的 pack("

    我不太了解 python 但从文档中可以看出代码 str AAAA str pack
  • Task.Factory.StartNew 或 Parallel.ForEach 对于许多长时间运行的任务? [复制]

    这个问题在这里已经有答案了 可能的重复 Parallel ForEach 与 Task Factory StartNew https stackoverflow com questions 5009181 parallel foreach
  • 显示 div 内的用户名列表

    我是 jQuery 新手 在我的项目中 我创建了一个类User其中代码如下所示 static ConcurrentDictionary
  • 当 foreach 块的内容具有 Conditional 属性时,C# 编译器是否会对其进行优化?

    我正在工作中编写一些调试代码 我想知道我所做的是否会损害性能 让我们看一下代码 foreach var item in aCollection Debug WriteLine item Name 我知道 Debug 类使用 Conditio
  • 尽管浮点数相同,但它们并不相等? [复制]

    这个问题在这里已经有答案了 下面的程序输出This No is not same 当两个数字相同时为什么会这样做 void main float f 2 7 if f 2 7 printf This No is same else prin
  • 打开位置设置页面或提示用户启用位置

    我一直在绞尽脑汁 徒劳地谷歌搜索 我正在尝试找到一种方法来提示用户通过直接进入设置页面或仅点击屏幕上的 是 来切换位置 我见过的所有代码似乎都不起作用 有人有有效的方法吗 一个详细的例子将不胜感激 谢谢 我对 Xamarin 开发非常陌生
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • 为什么 rand() 总是返回相同的值? [复制]

    这个问题在这里已经有答案了 可能的重复 在C中生成随机数 https stackoverflow com questions 3067364 generating random numbers in c 使用 rand 生成随机数 http
  • 从二进制文件读取字节到 long int

    我有两个问题 我有二进制文件的数据 我想使用 read 函数读取前 8 个字节以签署 long int 但我不能 你知道我该怎么做吗 如何直接读取一块数据到字符串中 我可以像所示那样阅读吗 前任 ifstream is is open te
  • 主构造函数不再在 VS2015 中编译

    直到今天 我可以使用主构造函数 例如 public class Test string text private string mText text 为了能够做到这一点 在以前的 Visual Studio CTP 中 我必须将其添加到 c
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • 如果项目包含多个文件夹,如何使用 Add-Migration

    我想Add Migration使用我的 DbContext 但出现错误 The term add migration is not recognized as the name of a cmdlet function script fil
  • 如何阻止 Control-I 在 CoreWindow 范围内的 UWP 文本框中插入选项卡?

    当我在 UWP 应用程序中有一个 TextBox 时 对我来说 奇怪的行为 在 Windows 10 中创建通用的空白应用程序 UWP 应用程序 使用以下代码将文本框添加到默认网格
  • 模板定义中的友元函数

    我的问题有点相关this https stackoverflow com questions 1297609 overloading friend operator for template class one 我想重载某些类的运算符 te
  • 如何在 SQLite 中检查数据库是否存在 C#

    我目前正在用 C 编写一个应用程序 并使用 sqlite 作为嵌入式数据库 我的应用程序在启动时创建一个新数据库 但如何让它检查数据库是否存在 如果它确实存在 我如何让它使用它 如果不存在如何创建一个新数据库 这是我到目前为止所拥有的 pr
  • 动态菜单创建IoC

    我想知道是否有人知道我如何创建如何使用 AutoFac 之类的东西来让我动态地允许 dll 创建自己的表单和菜单项以在运行时调用它们 所以如果我有一个 员工 dll 新入门表格 证书表格 供应商 dll 供应商详细信息来自 产品形态 在我的
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS

随机推荐

  • 如何更新已安装的 Windows 服务?

    我用 C 编写了一个 Windows 服务 我已经将它安装在我的机器上 并且运行得很好 当您安装服务时 exe被复制到某个地方 还是它指向我的bin文件夹 这是为了让我知道 当我不时更新我的 代码时 我是否必须卸载并重新安装我的服务才能更新
  • 为什么在searchBar和tableview之间添加空白?

    我有一个表格视图控制器 我添加了搜索栏 但是当我点击 searchBar 时 searchBar 和 TableView 之间有一个空格 为什么 以及如何修复 在下面我添加了屏幕截图和代码 tableViewController 列表 感谢
  • Java 中的 JAR 级(汇编级)类范围

    在 C 中 如果我希望某个类对该程序集 DLL 中的任何类都可见 我只需将其范围设置为internal 这是默认值 我怎样才能在Java中做到这一点 在Java中 我注意到默认 内部范围是封装级别 not JAR 级别 这对我来说是一个问题
  • Python 中的图像注视点

    我希望能够在 Python 中将焦点放在图像的中心 我的输入图像可以表示为 2D Numpy 数组 我想要获得中心高分辨率但两侧模糊的输出图像 我发现了一个名为的 OpenCV 函数logplar interp为此目的 但它似乎不存在于 O
  • IOS中如何处理用户认证持久化?

    我正在尝试为我的 iPhone 应用程序和服务器构建基础 我的用户将从 iPhone 应用程序注册并登录 在正常的网站登录中 http 服务器会提供 cookie 以允许用户后续的请求保持身份验证 我应该如何在 iPhone 上处理这个问题
  • 关闭 Excel.Workbook 时出现 COMException(0x80010108 - RPC_E_DISCONNECTED)

    当我运行以下代码时 出现以下异常 NOTE ExcelApp is a Private main form variable Dim ReportBooks As Excel Workbooks ExcelApp Workbooks Dim
  • 如何在异步模式下使用 XMLHttpRequest 设置多个标头数据?

    我的 api 调用要求我在标头中传递 api 密钥 但我从 api 服务返回错误 error 2424452 message Invalid Api Key 我知道我的 api 密钥是有效的 因为我可以在 Python 中进行相同的 api
  • 如何替换 Gradle 构建产品文件中的令牌?

    我为 Gradle 设置了一个普通的构建脚本 我想做的一件事是指定我的构建版本 这是我设置的用于替换主 Java 源文件中的版本标记的代码 import org apache tools ant filters ReplaceTokens
  • 什么是位掩码?

    我对 C 编程相当陌生 并且遇到了位掩码 位掩码的一般概念和作用是什么 非常感谢例子 掩码定义要保留哪些位以及要清除哪些位 屏蔽是将屏蔽应用于值的行为 这是通过执行以下操作来完成的 按位与运算以提取值中的位子集 按位或运算以设置值中的位子集
  • 当 HTML5 画布准备好时调用函数

    我将多个 PNG 图像加载到画布上 因此生成画布需要一些时间 我想在画布加载时显示加载图标 如何检查画布是否正在加载或准备就绪 HTML
  • OpenGL ES 可以渲染非基本二维的纹理吗?

    在我深入研究将当前的渲染系统转换为 openGL 之前 这只是一个简单的问题 我听说纹理需要采用基本 2 尺寸才能存储以进行渲染 这是真的 我的应用程序内存非常紧张 但大多数位图都不是 2 的幂 存储非基2纹理会消耗更多内存吗 确实 具体取
  • 流程发布资源

    我正在尝试构建我的react native项目并使用react native fbsdk 我在用 电子邮件受保护 cdn cgi l email protection and 电子邮件受保护 cdn cgi l email protecti
  • 如何升级密码存储方案(更改哈希算法)

    我被要求对 Intranet 站点实施一些更改 更新 正如他们所说 使其成为 面向未来 我们发现密码是使用 MD5 算法进行哈希处理的 该系统自 2001 年以来就已经存在 所以当时已经足够了 我们现在想要将哈希算法升级为更强的算法 BCr
  • (function(){})() 和 (function(){}()) 之间的区别,自调用匿名函数[重复]

    这个问题在这里已经有答案了 看看括号的位置 有什么不同吗 函数 function 和 func function 从技术上讲 第一个定义了一个匿名函数 然后调用它 第二个定义了一个匿名函数 该函数在定义时调用自身 实际上 它们是相同的
  • 执行命令时如何在atom中设置环境变量

    我正在尝试将我的环境变量设置为 env DEBUG babel 但我不知道在 Atom 编辑器中哪里可以使用这个设置 要使 shell 的环境变量可供 Atom 使用 请安装以下两个小 Atom 包 来自 shell 的环境 https a
  • PHP 检测 Fetch Api 与 XMLHttpRequest

    截至目前 我的网站正在使用 jQuery Ajax 从前端向后端发出请求 然后后端通过检查 SERVER HTTP X REQUESTED WITH XMLHttpRequest 来确定 ajax 请求 我正在尝试仅切换到本机 JS 并且想
  • 访问公共 AWS s3 存储桶

    我们一群朋友正在做一个 Map Reduce 项目 并且正在处理一个通用数据集 我的朋友已使用他的 AWS 帐户将数据上传到 s3 存储桶 并将 s3 存储桶策略设置为 Version 2008 10 17 Id Policy1417380
  • 特征仅适用于对象吗?

    又在尾巴上这个问题 https stackoverflow com q 68575795 891440 我正在尝试做一个will特质工作 使用这个 打高尔夫球的 代码 sub show value a var say Value of a
  • 通用构造函数和反射

    是否可以看出哪个构造函数是通用构造函数 internal class Foo
  • 执行策略“SqlServerRetryingExecutionStrategy”不支持用户启动的事务

    我有一个 ASP NET Core 5 MVC Web 应用程序 使用 Entity Framework Core 5 我们实现 Web 组件 例如网格或电子表格 我们与 Telerik 合作 当我在组件中进行一些更改 然后尝试保存更改时