EF Core通过Task并行写入DB



有一个文件是分部分读取的,每个部分都通过yield return返回,然后负责将读取行写入数据库的任务应该使用EF Core启动。问题是不可能在一个上下文上同时运行多个操作。

List<Task> tasks = new List<Task>();
foreach (var portion in reader.ReadPortions(file, 1000))
tasks.Add(Task.Run(async () => await saver.SaveWithMerge(portion)));
Task.WaitAll(tasks.ToArray());

如何解决这一问题?

不可能在一个上下文上同时运行多个操作。

这是正确的。您的选择是:

  1. 执行所有更改,然后执行单个SaveChangesAsync
  2. 使用多个EF上下文,每个并发更新一个
  3. 批处理更改,并在每个批之间调用SaveChangesAsync

最新更新