セルフ トラッキング エンティティ。素晴らしい。
あなたが何かをするときを除いて
return Db.Users;
自己追跡エンティティは追跡されません (おそらく逆シリアル化されるまで)。
罰金。したがって、私たちに戻ってきたエンティティが追跡を有効にしていない可能性があることを認識する必要があります。
それで???
私が試したこと
指定されたメソッド本体の場合:
using (var db = new Database())
{
if (update.ChangeTracker.ChangeTrackingEnabled)
db.Configurations.ApplyChanges(update);
else
FigureItOut(update, db);
db.SaveChanges();
update.AcceptChanges();
}
次の実装はFigureItOut
すべて失敗します。
db.Configurations.Attach(update);
db.DetectChanges();
または
db.Configurations.Attach(update);
db.Configurations.ApplyCurrentValues(update);
または
db.Configurations.Attach(update);
db.Configurations.ApplyOriginalValues(update);
または
db.Configurations.Attach(update);
db.Configurations.ApplyChanges(update
また、私がそれに投げかけることができると考えることができる他のことについても、
- データベースから元のエンティティを取得する
- 各プロパティを手で比較する
- 必要に応じてプロパティを更新する
正確には、自分自身を追跡していない自己追跡エンティティをどうすればよいのでしょうか??
小さな更新:
エンティティを変更済みとして盲目的にマークすることはできますが、これは少し臭いようです。この場合、私たちができる最善のことですか?