2009-06-09 13 views
0

私はおそらく、EFのより大きな有用性の問題の1つに取り組んでいます。エンティティフレームワーク:大規模なクエリを実行する

モデルの非常に大きな部分で計算を実行する必要があります。たとえば、すべてのドアとそのドアのカテゴリを持つ建物が必要だとします。しかし、私はまた、窓、家具、屋根などが必要です

また、私のロジックは、それらのカテゴリ(サブカテゴリなど)の背後にあるより多くの結合テーブルに依存すると想像してください。

コードの多くの点でこのモデルのほとんどが必要なので、モデル全体を埋めてEFでリンクする必要があります。

これを実行するには、単にObjectContextを照会し、タイプセーフなインクルードを使用するだけです。

しかし、これは非実用的でエラーを起こしやすくなります。

誰もこの種の問題に取り組むための提案はありますか?

答えて

3

特にすべてを更新するつもりがない場合は、必要な値だけを取得するために投影を使用します。あなたはおそらく、家具のすべてのプロパティを必要とする、などので、代わりの実体そのものを取得していない、あなたは何をしたいプロジェクト:

from b in Context.Buildings 
where b.Id == 123 
select new 
{ 
    Name = b.Name, 
    Rooms = from r in b.Rooms 
      select new 
      { 
       XDimension = r.XDimension, 
       // etc. 

は今、あなたは、もはや何かがロードされているかどうかを心配する必要はありません。必要なものが読み込まれ、必要のないものは読み込まれません。生成されたSQLも劇的にシンプルになります。

+0

答えに感謝します。私はこのアプローチが実用的であるかどうか疑問に思っていますが、試してみる価値があります。 – Bertvan

+0

私は、あなたが必要としないものを読み込むためのパフォーマンスコストを支払うか、あなたがしていることを心配する必要はありませんニーズが読み込まれます。 –

関連する問題