首页 >后端开发 >C++ >为什么我的 Entity Framework Core 应用程序会抛出'第二个操作已开始”错误,如何修复它?

为什么我的 Entity Framework Core 应用程序会抛出'第二个操作已开始”错误,如何修复它?

Barbara Streisand
Barbara Streisand原创
2025-01-03 16:51:39795浏览

Why Does My Entity Framework Core Application Throw a

Entity Framework Core:解决执行期间的“第二个操作已开始”错误

在最近使用 ASP.Net Core 2.0 和 Entity Framework Core 进行开发时遇到的问题中,发生错误:“在上一个操作完成之前在此上下文上开始了第二个操作。”此异常由InvalidOperationException,表示在前一个操作完成之前,在同一上下文上启动了多个操作。

检查代码库,负责填充具有各种属性和相关数据的实体列表的方法被确定为罪魁祸首。有问题的方法包括使用 Include 语句进行查询以合并相关实体,并将这些实体映射到视图模型。

根本问题的根源在于整个应用程序中解决和使用 DbContext 的方式。当使用 IoC(控制反转)进行依赖注入时,DbContext 应注册为 Transient。这需要使用以下代码片段:

services.AddDbContext<MyContext>(ServiceLifetime.Transient);

services.AddTransient<MyContext>();

而不是:

services.AddDbContext<MyContext>();

默认行为是将 DbContext 添加为作用域,当多个线程同时访问上下文时,这可能会导致冲突。

此外,异步操作和异步 lambda 表达式可能会加剧此问题。对 DbContext 使用 Transient 会为每个类授予其实例,从而防止跨多个类对实体进行任何更改。

有关此异常的更多见解,请参阅以下资源: [https://docs.microsoft.com/en-us/ef/core/miscellaneous/warnings/second-operation-started](https://docs.microsoft.com/en-us/ef/core/miscellaneous/警告/第二次操作开始)

以上是为什么我的 Entity Framework Core 应用程序会抛出'第二个操作已开始”错误,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn