c# - 在上一个操作完成将 EF Core 2 升级到 EF Core 3.1.3 之前,在此上下文中启动了第二个操作
问题描述
我刚刚尝试从 EF Core 2 升级到 EF Core 3。我的每个调用都是一个 Async Task<> 方法,但我仍然得到 A "第二个操作开始,请参阅https://go.microsoft.com/fwlink /?linkid=2097913 “错误。我知道它说要等待每种方法,但这不会破坏进行异步调用的目的吗?另外,为什么它在 EF Core 2 而不是 EF Core 3 中工作?如果我必须使用 diff db 上下文,如何通过 .net core 3 中的依赖注入来完成?
// Async method that we will await later.
var softwareServiceCodeTask = _pricingCalcRepo.IsSoftwareServiceCodeAsync(jobsId)
pricingCalcInfo = await GetJobDetailsAsync(jobsId);
private async Task<PricingCalculationInfo> GetJobDetailsAsync(int jobsId)
{
return await (
from jobs in _contextProposal.PRP_Jobs
join service in _contextProposal.PRP_Service on jobs.ServiceId equals service.ServiceId
join proposal in _contextProposal.PRP_Proposal on service.ProposalId equals proposal.ProposalId
where jobs.JobsId == jobsId
select new PricingCalculationInfo
{
ContractYear = proposal.ContractYear,
BidCrewSize = jobs.BidCrewSize,
ServiceCode = service.ServiceCode,
Territory = jobs.Territory,
TotalPONIs = jobs.TotalPONIs,
WeekWorkHours = _appSettings.Value.WeekWorkHours,
NonProductiveHoursPerWeek = _appSettings.Value.NonProductiveHoursPerWeek
}).FirstAsync();
}
解决方案
必须等待第一行。EF 不允许同时运行多个同时操作。虽然许多查询可能会并行运行,但 EF 不支持并行查询,基本上只是将它们完全切断,以防万一某些事情无法正常工作。
总而言之,您需要等待将立即使用 EF 上下文的所有内容。您不能让它运行并尝试进行另一个查询。
更新
需要明确的是,EF从未支持并行查询。这包括 EF Core 和较旧的 EF。但是,EF Core 之前并未明确阻止您这样做,但结果从未得到保证。然而,它并没有明确阻止你的事实给了很多人的印象,那就是它很好,我认为这就是他们现在明确阻止你的原因。就像我说的那样,大多数时候它可能会很好,但是在某些极端情况下它可能会破坏一切。由于 EF 并没有真正制定处理这些边缘情况的计划,因此它完全阻止了您。你可以说这是 EF 的失败,而且很可能是这样,但事实就是这样:你不能在 EF 中并行运行查询。
推荐阅读
- php - 将 ajax 数据填充到 laravel 视图中
- android - python for android 在开始时崩溃:缺少模块“google_speech”和“gtts”
- python - 检查特定字符串是否存在于文本中的第一个或第二个位置
- php - 获取嵌套元素 PHP HTML Simple Dom
- javascript - 将浏览器窗口始终放在最前面以获取有效的用例
- javascript - 在 PHP 代码中使用 Jquery 输出值来显示图像
- sql - SQL 滞后窗口和自定义逻辑
- python - 将 GCP 服务与 python 和代理一起使用
- python - python中相同计算的矛盾值
- java - 在android上用opengl es绘制矩形不起作用