6

Application_BeginRequest で Entity オブジェクト コンテキストをセットアップし、それを Request.items に格納し、リクエスト全体で使用し、Application_EndRequest で破棄するのが賢明だと思います。そうすれば、コンテキストは常に利用可能になり、ビューで Entity Framework オブジェクト グラフをナビゲートし、まだ熱心にフェッチしていないものを遅延読み込みできます。

これは、 Ruby on Rails で開発するようなものになると思います。

私はそのような異端を話すために撃たれるべきかもしれませんが、それはとてもクレイジーです.

ただし、Application_BeginRequest と ..EndRequest をASP.NET MVCで起動することはできません。彼らは解雇されていませんか?私がする必要がある特別なトリックはありますか?

4

2 に答える 2

6

EF のオブジェクト コンテキストは、L2S のデータ コンテキストと同様に、"作業単位" として設計されています。これらはスレッド セーフではなく、長寿命になるようには設計されていません。

MVC では、コントローラーのコンストラクターで作成し (暗黙的か明示的かは関係ありません)、それを Dispose メソッドで破棄するのが最善の方法です。もちろん、EF は遅延読み込みを行わないため、遅延する独自の方法を見つける必要があります。:)

于 2008-11-11T07:38:32.403 に答える
4

ASP.NET MVC の 1.0 ビルドでは、beginrequest と endrequest の両方でイベント ハンドラーを接続し、SessionScope を新しく作成して、beginrequest の HttpContext.Items に格納し (Castle ActiveRecord に切り替えました)、endrequest で HttpContext からセッション スコープを選択しました。 .アイテムとそれを処分します。これにより、リクエストのライフサイクル全体で遅延読み込みが可能になります。(ビュー内のオブジェクト グラフをナビゲートすることもできます。)

于 2009-03-30T19:50:27.227 に答える