Entity framework core 实体框架核心:SaveChanges()非异步抛出;在上一个操作完成之前,在此上下文上启动了第二个操作。”;

Entity framework core 实体框架核心:SaveChanges()非异步抛出;在上一个操作完成之前,在此上下文上启动了第二个操作。”;,entity-framework-core,Entity Framework Core,我对实体框架相当陌生,在遇到这个错误之前,一切都进展顺利。我的代码试图使用SaveChanges()保存父表的子表,但出现以下错误: 在上一个操作完成之前,在此上下文上启动了第二个操作。这通常是由同时使用同一DbContext实例的不同线程引起的 此消息似乎与异步调用有关,必须使用wait-savechangessync()。但是,我没有调用异步版本的SaveChanges()方法,但仍然得到一条线程错误消息 我的代码相当简单: public void CreateRange(IList<

我对实体框架相当陌生,在遇到这个错误之前,一切都进展顺利。我的代码试图使用
SaveChanges()
保存父表的子表,但出现以下错误:

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

此消息似乎与异步调用有关,必须使用wait-
savechangessync()
。但是,我没有调用异步版本的
SaveChanges()
方法,但仍然得到一条线程错误消息

我的代码相当简单:

public void CreateRange(IList<Section> sections)
{
    // Add new sections and save context.
    _SqlRunnerContext.sectionsDbSet.AddRange(sections);
    _SqlRunnerContext.SaveChanges(); // This line throws the error.
}
public void CreateRange(IList部分)
{
//添加新节并保存上下文。
_SqlRunnerContext.sectionsDbSet.AddRange(sections);
_SqlRunnerContext.SaveChanges();//此行引发错误。
}
当列表中至少有两个条目时,似乎会发生错误。这让我认为这是实体框架在内部处理save的方式

调用此方法的代码将创建一个新的存储库,该存储库将创建一个新的dao和
SqlContext
。考虑到这一点,我认为这不会是代码之外的东西导致问题。我还尝试了foreach循环,并使用相同的错误分别保存每个项目

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

再次感谢


Adam

而不是删除所有记录,然后重新插入。我将代码更改为仅更新(如果存在)和添加(如果新)。这就解决了问题。

我可能已经解决了我自己的问题,只需更新已经存在的记录,并且仅在它们确实是新的情况下创建新记录(删除之前的所有记录)。明天我会做更多的测试并回信。谁实例化了SqlRunnerContext?什么时候处理好的?