“在此上下文中开始第二个操作” EF core 3.1 并发性重大更改 [重复]

2023-12-31

我正在从 netcoreapp 2.1 迁移到 3.1,并且发现了 EF core 3.1 的重大更改,但我无法解决。以下内容在 2.1 中有效,因此简单地说数据库上下文在设计上不是线程安全的,并指出其他不涉及此细微差别的问题并不能解决当前的问题。

之前在 2.1 中,这是有效的:

taskList.Add(MethodOne(myRequestObject));
taskList.Add(MethodTwo(myRequestObject));

await Task.WhenAll(taskList);

这两种方法都只从数据库上下文中读取(从未更改),看起来像这样:

private async Task MethodOne(RequestObject myRequestObject)
{
    var entity = await DbContext
    .MyDbSet
    .OrderByDescending(x => x.SomeProperty)
    .FirstOrDefaultAsync(x => x.Id == myRequestObject.Id);

    if (entity != null)
        myRequestObject.SomeRequestProperty = entity.AnotherProperty;
    }
}

在 3.1 中,即使我只是读取而不更改实体,数据库上下文 ConcurrencyDetector 也认为它已经EnterCriticalSection当第二个方法尝试在 DbContext 上等待时,这会导致异常:

InvalidOperationException:在此上下文上启动了第二个操作 在上一个操作完成之前

为了基线理智,我还尝试了以下方法,它确实有效(但对于我的应用程序的实际代码来说不是理想的解决方案):

await MethodOne(myRequestObject);
await MethodTwo(myRequestObject);

这是我的问题:

  1. 当我知道安全时,有没有办法继续告诉 EF core 3.1 允许并发。这在 2.1 中有效,所以很明显,不能通过简单地说数据库上下文在设计上从未允许这样做并将问题作为重复项来关闭来忽略这一点。我的应用程序已经在生产中愉快地运行了很长一段时间。只有在迁移到 3.1 后,这才成为问题。发生了什么变化?这种改变真的不可能解决吗?还是有例外情况,即上下文不允许这样做?如果这在“设计不允许”之前有效,那么现在是否也同样不成立?

当我知道安全时,有没有办法继续告诉 EF core 3.1 允许并发。这在 2.1 中有效,所以很明显,不能通过简单地说数据库上下文在设计上从未允许这样做并将问题作为重复项来关闭来忽略这一点。

数据库上下文从来不允许这样做。我从未见过这种代码可以在任何版本的 .NET Core 上运行。如果它happened在 2.x 中工作,它只是“工作”,因为代码赢得了其竞争条件,因此只是运气好。任何性能变化(内存减少、防病毒软件、备用网络路由)都可能导致此失败。认识到代码是错误的非常重要并且一直都是.

我的应用程序已经在生产中愉快地运行了很长一段时间。只有在迁移到 3.1 后,这才成为问题。发生了什么变化?

可能是框架中的一些时间。

如果这在“设计不允许”之前有效,那么现在是否也同样不成立?

竞争条件仍然存在。如果您的代码碰巧赢得了竞争条件,您将不会看到该异常。

这种改变真的不可能解决吗?还是有例外情况,即上下文不允许这样做?

没有解决方法可以强制 dbcontext 处理多个并发请求。执行并发请求的正常模式是使用多个 dbcontext,每个并发请求一个。

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

“在此上下文中开始第二个操作” EF core 3.1 并发性重大更改 [重复] 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 将所有互联网流量从我的 Android VoIP 应用程序路由到我自己的 VPN 服务器

    我们已经设置了您自己的 VPN 服务器 并希望通过此服务器路由来自您的 VOIP android 应用程序的所有流量 但到目前为止我看到的所有解决方案都使用 vpn 服务类http developer android com referen
  • 友好 URL(mod 重写)问题

    Hallo 我正在尝试创建 漂亮 的 URL 第一条规则按预期工作 它正在转动 www blabla com index php page tags tag blabla into www blabla com tags blabla 但第
  • Flutter - 更改堆栈顺序

    我有一个堆栈 在某种条件下 例如用户单击 我希望将较低顺序的小部件之一推到堆栈的顶部 使用下面的代码作为一个简单的示例 在 setState 方法中我需要什么代码来重新排序 以便第一个 底部 小部件成为最后一个 顶部 小部件 new Sta
  • 非静态字段、方法或属性需要对象引用

    我想以所有形式传递 myConnString 我正在 winform 和 mysql C 中工作 所以我尝试了这个链接 http www daniweb com software development csharp threads 499
  • 模板类限制[重复]

    这个问题在这里已经有答案了 我想知道是否有任何方法可以限制使用自定义条件为模板生成代码 在我的情况下 我想仅当模板类 T 已由类 bar 继承时才调用 foo 函数 类似这样 template
  • 为什么其他程序看不到我在 VS Code 中对文件所做的更改,直到我保存这些更改?

    我注意到当我在 VS Code 中更改文件时 另请参阅VS Code 选项卡手柄上有一个白点意味着什么 https stackoverflow com q 76024956 11107541 在我保存这些更改之前 其他程序仍会看到该文件的上
  • 正则表达式 - URL 中的希腊字符

    我有一个使用正则表达式的自定义路由器 问题是我无法解析希腊字符 以下是一些来自index php router gt get theatre plays TheatreController showPlays router gt get t
  • 分解旋转矩阵 (x,y',z'') - 笛卡尔角度

    分解旋转矩阵 x y z 笛卡尔角度 我目前正在与旋转矩阵我有以下问题 给定三个坐标系 O0 x0 y0 z0 O1 x1 y1 z1 O2 x2 y2 z2 这一致 我们首先相对于帧 0 旋转帧 1 然后相对于帧 1 旋转帧 2 旋转的顺
  • 导入错误:无法导入名称“getLogger”

    这个问题在这里已经有答案了 但似乎我遇到了一种无法用答案解释的情况 详细信息如下 我有一个名为logging py 的文件 代码如下 import sys print sys path from logging import getLogg
  • “应用程序包的顶层”在哪里?在 XCode 中

    我试图将 Default png 图像放入我的 iPhone 应用程序中 但无法弄清楚 应用程序包的顶层 在 XCode 窗口中的位置 在压缩发布之前 您是否不将其添加到 Xcode 中 而是添加到构建文件中 只需将其添加到您的项目中即可
  • 在 Unity 中注册类型时如何传入构造函数参数?

    我在 Unity 中注册了以下类型 container RegisterType
  • 使用 mod_wsgi 记录烧瓶错误

    很长一段时间以来我一直在努力让它发挥作用 但现在我真的束手无策 我已经尝试做我可以在 SO 和 Flask 文档中找到的所有内容 但仍然无法使用简单的错误日志来调试我的应用程序 下面是粘贴的代码 main py from flask imp
  • Powershell - “表达式只允许作为管道的第一个元素”

    在以下情况下如何避免此错误 codegenDir Z Desktop Song Renamer PowerShellRepresentation dir path MyMusicFolder recurse include mp3 m4a
  • CSS 停止图像下的文本换行

    我有以下标记 li img class fav star src images fav png span Text text and more text span li 我希望这样 如果文本换行 它就不会进入图像的 列 我知道我可以用tab
  • 清除网络浏览器控件中的选择

    我有一个带有网络浏览器控件的表单 我将所有文本 不是 html 数据复制到剪贴板 为此 代码片段是 webBrowser2 Document ExecCommand SelectAll false null webBrowser2 Docu
  • 仅数学证明助理

    大多数证明助手都是具有依赖类型的函数式编程语言 他们可以证明程序 算法 相反 我感兴趣的是最适合数学且仅适合数学 例如微积分 的证明助手 你能推荐一个吗 我听说过 Mizar 但我不喜欢源代码被关闭 但如果它最适合数学 我会使用它 Agda
  • 如何在具有硬编码凭据的 Android 项目中使用 Google Drive SDK

    如何将凭据硬编码到我的 Google Drive 服务 以便应用程序的用户始终无需身份验证即可访问我的文件 我找到了使用 Java SKD 的解决方案 但这些库不能很好地与 Android 配合使用 https developers goo
  • 我应该使用`!Is Good`还是`Is Good == false`?

    我不断看到代码进行这样的检查 if IsGood false DoSomething or this if IsGood true DoSomething 我讨厌这种语法 并且总是使用以下语法 if IsGood DoSomething o
  • 在kivy中设置全局字体大小

    无论是通过 python 还是 kivy 语言 在 kivy 中设置全局字体大小 即按钮和标签 的首选方法是什么 根据窗口大小按比例动态更改全局字体大小设置的好方法是什么
  • “在此上下文中开始第二个操作” EF core 3.1 并发性重大更改 [重复]

    这个问题已经存在了 我正在从 netcoreapp 2 1 迁移到 3 1 并且发现了 EF core 3 1 的重大更改 但我无法解决 以下内容在 2 1 中有效 因此简单地说数据库上下文在设计上不是线程安全的 并指出其他不涉及此细微差别