【发布时间】:2019-02-23 16:49:27
【问题描述】:
我正在使用EF Core 2.1,我正在尝试使用Tasks (TPL) 一次性更新多个实体:
public async Task UpdateAttendance(IEnumerable<MyEvents> events)
{
try
{
var tasks = events.Select(async entity =>
{
await Task.Run(() => Context.Entry(entity).Property(x => x.Attendance).IsModified = true);
await Context.SaveChangesAsync();
});
await Task.WhenAll(tasks);
}
catch (Exception ex)
{
throw new Exception(ex.Message ?? ex.InnerException.Message);
}
}
但这会引发以下错误。
在前一个操作完成之前,在此上下文中启动了第二个操作。不保证任何实例成员都是线程安全的。
Startup.cs
services.AddScoped<IMyRepository, MyRepository>();
我该如何解决这个问题?
【问题讨论】:
-
您真的需要异步更改实体状态吗?它对我来说没有意义。
-
更改
IsModified不会长期运行! -
我想多次致电
SaveChanges不是一个好主意。最好更新所有实体并调用一次。
标签: c# asp.net-core entity-framework-core ef-core-2.1