質問: Entity Framework 6を使用しています。パフォーマンス上の理由から、エンティティを`DbContext`にロードし、ローカルで使用しています。これまで、データベースへのすべての変更は`DbContext`を通過して`DbContext`ため、ローカルエンティティとデータベースは同期されていました。ただし、データベースでストアドプロシージャを呼び出す必要があります。これには、エンティティに反映する必要があるテーブル(DbContextの外部)を変更するという副作用があります。変更とは、新しいレコードを追加し、既存のレコードを削除/更新することを意味します。 エンティティインスタンスの一部は`ViewModel`クラス内にラップされているため、 `DbContext`して新しいものを作成したくありません。したがって、この方法で`DbContext`を削除すると、UIに大きな問題が発生します。 `DbSets`のすべての`DbSets`で`Load()`を呼び出すだけで、既存のインスタンスが置き換え`DbContext`ことを理解しています。そのため、古いエンティティインスタンスを使用するオブジェクトは機能しません。 だから、私は`Reload`メソッドを次のように使用できると思った: ``` context.Entry(entity).Reload(); ``` これによりローカルエンティティが更新されますが、これは`DbContext`既に知っているエンティティに対してのみ実行できます。ストアドプロシージャの実行の結果として作成/削除された新しいエンティティまたは削除されたエンティティは対象外です。 だから、私はする方法を探しています: 1. `DbContext`新しいエンティティをデータベースからロードします 2. `DbContext`既存のエンティティをリロードする 3. `DbContext`から削除されたエンティティを削除します
回答: これがEntity Frameworkの公式ドキュメントです。 データベースの状況を分析することから始めて、必要なときにデータ読み取り方法(熱心または遅延読み込みなど)を詳しく説明するか、コード生成とウィザードGUIを正しく使用するためのチュートリアルを提供しながら、必要なものを取得するスマートで迅速な方法を提案します。 ここで、データ読み取り戦略に関するより詳細な情報とチュートリアルがあります。 すでにコメントでお伝えしたように、私はデータベースからのアプローチと、制御されていないデータの振る舞い(またはストアドプロシージャを実行するときにデータベース全体を再ロードする)を避けるための遅延ロードを推奨します。 SPについて言えば、それはEntity Frameworkに同梱されているWizardを通して簡単にマッピングでき、メソッドでラップできます。 これらのリソースが役立つことを願っています!