私は、EFでロードしたデータのリストを持つグリッドを持つWPFアプリケーションを持っています。他のウィンドウでは、グリッド上にロードされた同じデータを変更することはできますが、別のdbcontextインスタンスを使用することができます。グリッド上で変更されたデータを表示するにはどうすればよいですか?私はctx.Entry<MyEntity>(instance).Reload();
と単一のエンティティをリフレッシュすることができます知っている - しかし、私はすべての変更を参照したいと私は何をしても、私は古い値を参照してください。この場合、インスタンスを新規作成しないでください。AsNoTracking
を使用することはできません。別のDbContextで変更をロードする
答えて
私は非常に単純なケースのように見えますが、なぜEFが単にエンティティの値を更新しないのか分かりません。
EFにもこのメカニズムがありますが、DbContext APIでは公開されていません。 ObjectContextに戻る必要があります。あなただけのエンティティのセットリロードしたい場合は、呼び出します。
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objectContext.Refresh(RefreshMode.StoreWins, listOfEntitiesToReload);
RefreshMode.StoreWins
すべての保留中の変更は、リロード値によって上書きされます。 RefreshMode.ClientWins
を使用して変更を保存し、リロードされたデータとマージすることもできます。この方法の問題点は、既に持っているエンティティだけをリロードすることです。あなたは新しいエンティティを取得しません。
あなたにも新しいエンティティを取得したい場合は、クエリを実行しなければなりませんし、あなたが値をリロードしたいEFを伝える必要があります。ここでも
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var objectSet = objectContext.CreateObjectSet<MyEntity>();
objectSet.MergeOption = MergeOption.OverwriteChanges;
var result = objectSet.Where(...).ToList();
MergeOption.OverwriteChanges
は、すべての保留中の変更が上書きされていますがマージするMergeOption.PreserveChanges
を使用することができます編集した値に値を再ロードしました。
私はまだいくつかの関係といくつかの関係で、そしておそらくデータベースで削除されたエンティティの値をリフレッシュすることにいくつかの問題があると思います。
これはまさに私が必要としているものです、ありがとう、EFに関する私の信念が復元されています:) – user1526627
@ ladislav-mrnka 1つの質問、最後のステップは本当に必要ですか?私があなたを正しく理解していれば、EFはすでに読み込んだレコードの変更を認識し、最初の方法でマージします。したがって、テーブルに新しい行を手動で追加する場合は、最初の方法でdbcontextに更新されることはありませんか?私はちょうどこれを試み、私は第二の方法の必要性を見た。多分、行動が変わったか、私はあなたを完全に誤解しましたか? :) – DrCopyPaste
- 1. データベースの変更を伴うDbContext
- 2. DBContext Entry.OriginalValuesとEntry.NewValuesで変更された値を記録する
- 3. Entity Framework - 生成されたベースコンストラクタ(DBContext)を変更する方法
- 4. DbContextは変更されたプロパティのみを検証します
- 5. 別のアクティビティでカウントを変更する
- 6. DbContext/ObjectDataSource更新の問題
- 7. 現在の設定を変更するときに別のView Controllerを再ロード
- 8. DbContextはそれが示す変更を保存しません
- 9. 同じページの別のページからロードされたdivを変更する
- 10. DbContextの外で変更されたエンティティを更新するにはどうすればよいですか?
- 11. DbContextジェネレータ - 別のネームスペースのモデルの設定
- 12. ASP.Net ID DbContextとDbContextをマージする
- 13. DBContextを使った明示的ロードが機能しない/値が変更されない
- 14. EF 4.x DbContextジェネレータ(またはPOCOエンティティジェネレータ)の変更点
- 15. DbContextと変更の追跡不一致とEFコードファースト
- 16. なぜdbContextでレコードを更新できないのですか?
- 17. 別のアクティビティのタブホストタブタイトルを変更する
- 18. Entity Framework 5 - 変更を保存した直後にDbContextをリフレッシュする
- 19. 別のプロセスロケールを変更する
- 20. localhostを別のドメインに変更する
- 21. アレイを別のフォーマットに変更する
- 22. NotifyIconを別のフォームに変更する
- 23. イベントを別のオブジェクトに変更する
- 24. 別のサブビューをロードする
- 25. 別のクラスの別のスレッドからJavaFX GUIを変更する
- 26. jazzhubで別名の名前を変更
- 27. DotNetZip国別文字を変更する
- 28. ObjectContextからDBContextへの変換
- 29. JavaScript内の別の関数の変数を変更する
- 30. .matファイルから別の名前の変数に変数をロードする
なぜあなたは 'AsNoTracking'を使用できませんか? –
グリッドに直接変更を加えて保存することができるためです。 – user1526627
そのような場合、保存されていないデータを編集してリロードすると、これらのデータが異なる場合があります。あなたはどのようにそのような問題を解決したいですか? –