问题描述
经过三个小时的调试和搜索,我希望有人在这里有一个答案。实体框架(使用MySQL)如果我连续快速调用以下函数(例如,相距0.1秒),则会引发以下异常。
但是,有时该功能无任何问题。第一个 ToList()
调用中抛出异常:
void InsertOrUpdateMaterials(List< Material> materials)
{
var id = GetUserId();
var materialIds = materials.Select(x => x.MaterialId).ToList();
//从DB中删除旧材料
var oldMaterials = Db.Materials.Where(p => p.CreatedBy == id&&
materialIds.Contains p.MaterialId))ToList(); // exception
Db.Materials.RemoveRange(oldMaterials);
Db.SaveChanges();
//将以前的材料替换为列表
中的新材料Db.Materials.AddRange(materials);
Db.SaveChanges();
}
奇怪的是,这个错误从未发生在开发服务器上,所以我研究了可能配置问题无效。
有时,实体框架会抛出:
再次指向到 ToList()
调用。任何想法?
对于可能有类似问题的其他人。基于上述注释,代码使用缓存的数据库上下文。创建数据库上下文之后,应用程序中安装了db-connection(无 StateChange
处理程序)。连接崩溃后,应用程序使用缓存的数据库上下文来执行一些操作。
创建一个新的数据库上下文解决了这个问题。 $ b
After three hours of debugging and searching, I'm hoping someone here has an answer. Entity Framework (using MySQL) throws the following exception if I call the following function quickly in succession (e.g. < 0.1 seconds apart).
However, sometimes the function works without any problems. The exception is thrown on the first 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();
}
Oddly, this error never occurred on the development server, so I looked into possible configuration issues to no avail.
Sometimes, Entity Framework throws:
Again pointing to the ToList()
call. Any ideas?
For other people that might a similar problem. Based on the above comments it seems that the code uses a cached db-context. After the db-context was created the db-connection broke (no StateChange
handler was installed in the application). After the connection breakdown the application used the cached db-context to perform some operations on it.
Creating a new db-context solved the problem.
这篇关于实体框架“意外连接状态”例外的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!