在最近使用 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中文网其他相关文章!