首页 > 解决方案 > 在上一个操作完成将 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();
        }

标签: c#asp.net-coreentity-framework-coreasp.net-core-3.0

解决方案


必须等待第一行。EF 不允许同时运行多个同时操作。虽然许多查询可能会并行运行,但 EF 不支持并行查询,基本上只是将它们完全切断,以防万一某些事情无法正常工作。

总而言之,您需要等待将立即使用 EF 上下文的所有内容。您不能让它运行并尝试进行另一个查询。

更新

需要明确的是,EF从未支持并行查询。这包括 EF Core 和较旧的 EF。但是,EF Core 之前并未明确阻止您这样做,但结果从未得到保证。然而,它并没有明确阻止你的事实给了很多人的印象,那就是它很好,我认为这就是他们现在明确阻止你的原因。就像我说的那样,大多数时候它可能会很好,但是在某些极端情况下它可能会破坏一切。由于 EF 并没有真正制定处理这些边缘情况的计划,因此它完全阻止了您。你可以说这是 EF 的失败,而且很可能是这样,但事实就是这样:你不能在 EF 中并行运行查询。


推荐阅读