经过三个小时的调试和搜索,我希望这里有人能找到答案。如果我连续快速调用以下函数(例如间隔
System.InvalidOperationException:意外的连接状态。使用包装提供程序时,请确保在包装的 DbConnection 上实现 StateChange 事件。
但是,有时该功能可以正常运行,不会出现任何问题。第一次抛出异常ToList()
call:
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();
}
奇怪的是,这个错误从未在开发服务器上发生过,因此我研究了可能的配置问题,但无济于事。
有时,实体框架会抛出:
System.Data.Entity.Core.EntityCommandExecutionException:已经有一个与此连接关联的打开的 DataReader,必须先将其关闭。
再次指向ToList()
称呼。有任何想法吗?
对于其他人来说可能会遇到类似的问题。根据上面的评论,代码似乎使用了缓存的数据库上下文。创建数据库上下文后,数据库连接中断(没有StateChange
处理程序已安装在应用程序中)。连接中断后,应用程序使用缓存的数据库上下文对其执行一些操作。
创建新的数据库上下文解决了问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)