2009-06-04 16 views
0

私はEntity Frameworkを使用してAsp.net MVCサイトを作成しており、データベースにコミットせずに新しいエンティティと更新エンティティを複数の要求に渡ってメモリ内に保持する方法を知りたいと思います。
たとえば、ユーザーがエンティティを編集するためのビューに移動し、そのビューでエンティティに子を追加できます。ユーザーがページの[保存]ボタンをクリックするまで、データベースに変更をコミットしません。
私は、私が理解しているObjectContextを永続させないことを選択しました。基本的には、エンティティを取得してセッション状態にするか、それに相当する場所に保存し、そこに変更を加え、ユーザーがページを終了したときにそれらをデータベースに送信します。
これを行う方法についてのご意見はありますか?Entity Frameworkエンティティの遅延コミット

答えて

1

ViewDataコレクションは、リクエスト間でオブジェクトを永続させるための一時的な「スクラッチパッド」です。これはSessionオブジェクトと同じように動作しますが、寿命が短くなります。

デフォルトのMVCプロジェクトでは、ViewData ["Message"]を使用してインデックスビューにメッセージを表示するホームコントローラで、この例を見ることができます。

+0

ああ、もう少し意味がありますが、私はMVCでもう一つの概念上の問題があるようです。 –

0

私は同様の問題を探してこの質問に出くわしました。他の誰かが同じ状況にある場合には、Josh Eの回答が間違っています.ViewDataは複数のリクエストにまたがって永続化されません。同じリクエスト内で発生するViewにデータを渡すためだけです。 TempData ISは複数の要求にわたって永続化されますが、その中に格納されている値は一度読み込まれるとクリアされます。

エンティティフレームワークがサポートされているかどうかはわかりませんが、セッションには(シリアル化可能な)オブジェクトを保存できます。ただし、これらのオブジェクトのライフタイムは、手動で削除しない限り、セッションの存続時間に依存します。また、これはかなりの量のメモリを占有する可能性があります。最も望ましい方法は、これを管理できる永続性フレームワークを使用することです。 Entity Frameworkがそれを実行できるかどうかはわかりません。 ADOに取り組んでいる私たちのために、私はまだ良い解決策を見つける必要があります。

関連する問題