2012-04-25 7 views
0

私のコントローラには、IEnumerableのEFエンティティを返すアクションがいくつかあります。ASP.NET MVC、EF:IEnumerableの代わりにアクションメソッドを返すようにする

私はこれらのアクションメソッドを代わりにリストを返すように考えていました(ビューに戻す前にmodel.ToList()を呼び出すだけです)。

私はそれを行うに思っている二つの理由があります:私が戻るならば、私は(/ onactionexecuting onactionexecuted)BaseControllerクラスのactionmethodsの各々のパフォーマンスを測定してい

  • まずIEnumerableでは、onactionexecutedメソッドの後までクエリは実行されません。
  • 第2に、私はOnActionExecutedの中に私の "サービス層"が使用している接続を処分することを計画していましたが、そこに配置すると、モデルは取り出されませんでした。

私の質問は、これを行うことの任意の欠点ですか? すべてのIEnumerableモデルが完全にトラバースされるので、使用されないデータを取得することは問題ではありません。

ありがとうございました。

+0

データをビューに渡す前に、クエリがマテリアライズ(実行)されていることを確認する必要があります。 'ToList()'を呼び出すことはこれを行う一つの方法です。 –

答えて

2

これは、IMOを行うには完全に有効なものです。あなたはすでに賛否両論を指摘しています。主な違いは、.ToListは一度にすべてメモリにロードされ、もう一方はオンデマンドロードが可能になる点です。

とにかく列挙全体を読み込む予定の場合は、.ToListを呼び出すと、すべてを一度に1つではなく1つのグラブで要求することで、帯域幅を節約できます。とにかくこのようなことがあるとすれば、それはもっと良いパスかもしれません。

+0

Listはページングの後に返されることを前提としているため、各部分は正常に動作する<100項目です。 – st78

関連する問題