entity-framework-core - 实体框架核心: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 循环,并以相同的错误单独保存每个项目。
如果有人可以给我一个建议或想法尝试什么,将不胜感激。
再次感谢,
亚当
解决方案
而不是删除所有记录然后重新插入。我将代码更改为简单地更新(如果存在)并添加(如果是新的)。这已经解决了这个问题。
推荐阅读
- android - PJSIP_EUNSUPTRANSPORT [status=171060] 同时创建 TCP 配置 Android PJSIP
- r - 如何在其他语言中使用 grep 删除单词?
- dart - Flutter 中的 ListView.builder() 具有不同的项目
- algorithm - 找到遍历满足特定条件的图的所有方法
- installation - 如何在 Debian 9 上安装 puppet 3.X 客户端?
- python - 如何根据 django 中的 Datefield 过滤查询集?
- c - 将窗口应用于音频样本会拧紧输出
- android - 使用输入阅读器读取布局 xml 文件
- javascript - 如何在 Javascript 中的函数中创建另一个代码块的快捷方式?
- python - 检查两个输入是否已填充