【问题标题】:Entity Framework Miss Update实体框架未更新
【发布时间】:2023-01-24 13:19:24
【问题描述】:

有时实体不会在范围内更新,但会提交插入。 我认为这个问题是由于隔离级别,添加到注册表中的查询数量。我还认为这可能是数据库中事物有效的顺序,因为暗示更改实体的端点调用发生得非常快,即使顺序正确。我不知道...

代码是这样的:

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 的类型是什么?
  • 这只是一个例子,在实际情况中是 INT。状态 = 1。

标签: c# sql entity-framework


【解决方案1】:

你应该做的是先查询学校,然后将结果分配给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 来更新数据库

【讨论】:

    猜你喜欢
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多