1

我使用 Attach 方法来更新我的数据库

     name=New Name;
     checkBox1=false;
     Entity entity= new Entity();
        entity.ID= collection.ID;
        db.entities.Attach(entity);
        entity.name=name;
        entity.checkBox1=checkBox1;
        db.SaveChanges();


此查询仅更新了所需表的名称列,但使用 checkBox1 值它什么也没做......
为什么我做错了什么或者这是一个错误?
使用以下查询语法解决了问题。

    var entity= db.entities.Find(ID);
    entity.name=name;
    entity.checkBox1=checkBox1;
    db.SaveChanges();
4

1 回答 1

2

如果您已关闭 AutoDetectChanges,则可能会出现此问题,这是我写的关于 AutoDetectChanges 功能的帖子:http: //blog.staticvoid.co.nz/2012/05/entityframework-performance-and.html

如果您关闭此选项并附加实体,则快照引擎可能无法找到属性更改。在保存之前尝试手动调用检测更改。您可以使用以下内容:

db.ChangeTracker.DetectChanges();

另一个可能的问题是快照引擎认为 checkbox1 属性的初始状态为 false,这意味着当您将值设置为 false 时它不会注册更改。要解决此问题,请将 checkbox1 的初始值设置为 true,然后在附加后将其设置为 false。这将确保值发生变化,因此可以通过快照检测到。

例如使用:

name=new Name();
 checkBox1=false;
 Entity entity= new Entity();
    entity.ID= collection.ID;
    entity.checkBox1=!checkBox1;
    db.entities.Attach(entity);
    entity.name=name;
    entity.checkBox1=checkBox1;
    db.SaveChanges();
于 2012-05-24T08:01:58.650 回答