最近、MVVMWPFアプリケーションで多くのEntityFrameworkを使用していますが、いくつかの問題が発生しました。データを表示するために、私のビューモデルは短命のObjectContextを使用しています。これらのビューモデルは長時間実行されるプロセスで使用されるため、パフォーマンスを低下させないために、短命のObjectContextを使用することを選択しました。
つまり、基本的には、エンティティが切断モードで消費されていることを意味します。これらのエンティティは、作成、表示、更新、および削除できます。切断モードを使用して変更をデータベースに保存することに問題はありませんでした。SaveChanges()
しかし、メソッドの呼び出し時にエラーが表示されずに変更が保存されない特定のケースを見つけました。これは、コレクションプロパティを持つエンティティを更新しようとすると発生します。エンティティのスカラープロパティは問題なく保持されますが、コレクションの変更は、再接続時にこれらの変更を追跡できなかった場合のように、データベースに反映されません。
これは、エンティティ名を変更してから、そのレポートコレクションにオブジェクトを追加する私の場合のサンプルコードです。の後SaveChanges()
、クライアント名のみがデータベースに反映されます。
this.Client.Name = "Test Client";
this.Client.Reports.Add(new Report { Name = "Test Report" });
using (ReportCompositionEntities entities = new ReportCompositionEntities(this.connectionStringName))
{
entities.Clients.ApplyCurrentValues(this.Client);
entities.SaveChanges();
}
それで、私は何か間違ったことをしているのですか、それともEFはエンティティを再接続するときにこの種の変更を追跡できないのですか?