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 をオフにすると、この問題が発生する可能性があります

このオプションをオフにしてエンティティをアタッチすると、スナップショット エンジンがプロパティの変更を検出できない場合があります。保存する前に、変更の検出を手動で呼び出してみてください。以下を使用できます。

db.ChangeTracker.DetectChanges();

もう 1 つの考えられる問題は、スナップショット エンジンが、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 に答える