首页 > 解决方案 > 实体框架核心:SaveChanges() 非异步抛出“在前一个操作完成之前,在此上下文上启动了第二个操作。”

问题描述

我对 Entity Framework 还很陌生,一切都很顺利,直到我遇到这个错误。我的代码正在尝试使用保存父表的子级,SaveChanges()但出现此错误:

在前一个操作完成之前,在此上下文上启动了第二个操作。这通常是由不同的线程同时使用同一个 DbContext 实例引起的。

此消息似乎与异步调用相关并且必须使用 await - SaveChangesAsync()。但是我没有调用该SaveChanges()方法的异步版本,但仍然收到线程错误消息。

我的代码相当简单:

public void CreateRange(IList<Section> sections)
{
    // Add new sections and save context.
    _SqlRunnerContext.sectionsDbSet.AddRange(sections);
    _SqlRunnerContext.SaveChanges(); // This line throws the error.
}

当列表中至少有两个条目时,似乎会发生错误。这让我认为这是实体框架在内部处理保存的方式。

调用此方法的代码会创建一个新的存储库,该存储库又会创建一个新的 dao 和SqlContext. 鉴于此,我认为不会是此代码之外的东西导致问题。我还尝试了一个 foreach 循环,并以相同的错误单独保存每个项目。

如果有人可以给我一个建议或想法尝试什么,将不胜感激。

再次感谢,

亚当

标签: entity-framework-core

解决方案


而不是删除所有记录然后重新插入。我将代码更改为简单地更新(如果存在)并添加(如果是新的)。这已经解决了这个问题。


推荐阅读