实体框架"意外连接状态"例外

ara*_*ao6 18 c# entity-framework signalr

经过三个小时的调试和搜索,我希望有人在这里有答案.如果我连续快速调用以下函数(例如,相隔<0.1秒),实体框架(使用MySQL)会抛出以下异常.

System.InvalidOperationException:意外的连接状态.使用包装提供程序时,请确保在包装的DbConnection上实现StateChange事件.

但是,有时功能没有任何问题.第一次ToList()调用时抛出异常:

void InsertOrUpdateMaterials(List<Material> materials)
{
    var id = GetUserId();
    var materialIds = materials.Select(x => x.MaterialId).ToList();

    // Remove old materials from DB
    var oldMaterials = Db.Materials.Where(p => p.CreatedBy == id && 
            materialIds.Contains(p.MaterialId)).ToList(); // exception
    Db.Materials.RemoveRange(oldMaterials);
    Db.SaveChanges();

    // Replace previous materials with the new ones in list
    Db.Materials.AddRange(materials);
    Db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这个错误从未发生在开发服务器上,所以我调查了可能的配置问题无济于事.

有时,Entity Framework会抛出:

System.Data.Entity.Core.EntityCommandExecutionException:已经有一个与此Connection关联的打开DataReader,必须先关闭它.

再次指着ToList()电话.有任何想法吗?

Moe*_*ald 5

对于其他人来说可能会遇到类似的问题。根据上面的评论,代码似乎使用了缓存的数据库上下文。创建数据库上下文后,数据库连接中断(StateChange应用程序中未安装处理程序)。连接中断后,应用程序使用缓存的数据库上下文对其执行一些操作。

创建新的数据库上下文解决了问题。