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()
电话.有任何想法吗?
对于其他人来说可能会遇到类似的问题。根据上面的评论,代码似乎使用了缓存的数据库上下文。创建数据库上下文后,数据库连接中断(StateChange
应用程序中未安装处理程序)。连接中断后,应用程序使用缓存的数据库上下文对其执行一些操作。
创建新的数据库上下文解决了问题。