【发布时间】:2021-10-22 03:38:03
【问题描述】:
我明白错误在说什么,但无法实施解决方案。我需要在线程中调用的方法中调用数据库(只是为了选择)。
我已经为此搜索了多个答案并尝试添加ServiceLifetime.Transient,但得到了相同的结果。看起来我的 DI 出了点问题。
我也尝试将构造函数中的上下文传递给PriceSheetAsyncRepository,但没有运气。
public class PriceSheetRepository : IPriceSheetRepository
{
private readonly Pricing_PortalContext _context;
private readonly ILogger _logger;
public PriceSheetRepository(Pricing_PortalContext context, ILogger<PriceSheetRepository> logger)
{
_context = context;
_logger = logger;
}
public async Task<bool> ProcessPriceSheetImport(long ImportId)
{
var pricesheetAsyncRepo = new PriceSheetAsyncRepository(_logger);
foreach (var i in RequestList)
{
tasks.Add(Task.Run(async () => await pricesheetAsyncRepo.ValidatePublishAsync(i, _context)));
}
await Task.WhenAll(tasks);
}
}
public class PriceSheetAsyncRepository
{
private readonly ILogger _logger;
public PriceSheetAsyncRepository(ILogger logger)
{
_logger = logger;
}
public Task<bool> ValidatePublishAsync(PriceSheetImportModel i, MyDBContext _context)
{
return Task.Run(() =>
{
i.IsValid = true;
i.LinePart = i.LinePart?.ToUpper();
if (effDate != null && _context.MyTablePublish.Where(x => x.A == i.A).Any())
{
i.IsValid = false;
i.Message = i.Message + "Duplicate published record, ";
}
}
}
}
谁能指出我在这里做错了什么?
【问题讨论】:
-
听起来实体框架没有线程安全上下文。
标签: .net-core dependency-injection entity-framework-core ef-core-2.0