[英]Entity Framework Miss Update
有时实体没有在 scope 内更新,但插入已提交。 我认为这个问题是由于隔离级别,添加到注册表中的查询数量。 我还认为这可能是数据库中事物有效的顺序,因为暗示更改实体的端点调用发生得非常快,即使顺序正确也是如此。 我不知道...
代码是这样的:
using (var scope = new TransactionScope())
{
var db = new Context().Database.ExecuteSqlCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;")
var student= db.Students.SingleOrDefault(x => x.ID == 1);
var schoolName = "TestSchool";
db.School.Insert(new School{ Name = schoolName }); // IT ALWAYS WORKS
student.School = schoolName; //SOMETIMES THIS CHANGE DOESN'T WORK
db.Save();
scope.Complete();
}
有什么帮助吗?
它只发生在海量数据中,使测试变得困难
你应该做的是先查询学校,然后将结果分配给student.School
像这样:
using (var scope = new TransactionScope())
{
var db = new Context().Database.ExecuteSqlCommand("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;")
var student= db.Students.SingleOrDefault(x => x.ID == 1);
var schoolName = "TestSchool";
db.School.Insert(new School{ Name = schoolName }); // IT ALWAYS WORKS
// Query new school here
var newSchool = db.School.SingleOrDefault(x => x.SchoolName = schoolName);
// Assign the result to student's School property
student.School = newSchool;
db.Save();
scope.Complete();
}
这样,实体框架将能够“跟踪”更改并生成正确的 SQL 以更新数据库
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.