2009-03-30 16 views
2

私が集めた限りでは、エンティティへのLINQはLoad()またはInclude()という熱意のあるローディングを推奨します。しかし、私は積極的な読み込みは、多層アプリケーションで行われる必要がありますか?エンティティへのEager-loading&LINQ

は、それが一般的なItem GetItem(int id)機能を持っているために、データアクセス層(エンティティインスタンスをカプセル化するリポジトリクラス)のために正しいです、とビジネスロジック層で

Item item = dbRepository.GetItem(itemId); 
if (!item.itemDetails.IsLoaded) 
item.itemDetails.Load() 

またはリポジトリのクラスは、明示的に異なる必要がありますを行います異なる外交関係をロードする関数は、熱心に負荷される関係のItemを返します。

多くの感謝!

編集: 例 - http://www.asp.net/learn/mvc/tutorial-29-cs.aspx

public Contact GetContact(int id) 

この関数は、Contactエンティティタイプを返します。しかし、ビジネスロジックのニーズに応じて、Contactエンティティの異なる外部関係をLoad()またはInclude()にすることができます。この要件は、どのような関係をロードするかを示すパラメータを持つより多くのオーバーロードされたGetContact()メソッドを必要とするか、単にビジネスロジックでLoad()を実行する必要がありますか?

答えて

0

ほとんどの場合、私はどちらもしません。代わりに、LINQを使用して、エンティティタイプをプレゼンテーションモデルタイプにマッピングします。この場合、読み込みをまったく考慮する必要はありません。例:

var presentationModel = (from entity in Repository.Entities 
         select new PresentationEntity() 
         { 
          Prop = entity.Prop, 
          ChildProp = entity.Child.Prop 
         }).First(); 

子供の読み込みについて考える必要はありません。エンティティへのLINQは、異なるタイプに投影するときにこれを行います。

+0

あなたの答えをありがとう。この種の論理はどこで行われるべきですか?モデルレイヤー(私はMVCを想定しています)でマッピングを行うと、データアクセスレイヤーがプレゼンテーションモデルを知る必要があるように、PresentationモデルでModelクラスを混乱させることはありませんか? –

+0

リポジトリタイプからプレゼンテーションモデルタイプへのマッピング(およびその逆)は、コントローラ内に存在する必要があります。 –

+0

これは、linqクエリがコントローラ内にも存在することを意味しますか? (申し訳ありません、これはかなり新しいです) –

関連する問題