2011-04-12 36 views
1

EF4は関連付けられたデータを取得するのに最適ですが、関連付けが明示的でない場合はどうしますか?例は私の状況を示しています:関連付けが存在しない場合の関連エンティティの選択

MasterTableには、child1Idとchild2Id列があります。

対応する主キーchild1Idとchild2Idを持つ2つのテーブルChild1とChild2があります。 Master、Child1、Child2エンティティがあります。

マスターとChild1/Child2のテーブルまたはエンティティ間に外部キーまたはエンティティフレームワークの関連付けはありません。

マスタレコードとそれに対応する子レコードを、マスター内の一致する子Idがすべての場合に、2つの子テーブルから選択するにはどうすればよいですか?

私は関係や関連性を改装することはできません。

リチャード

答えて

0

エンティティをlinqで手動で選択する必要があります。ここでは、2つのテーブル間の左結合を行う方法を示します。

var query = from m in context.Masters 
      where m.Id == 1 
      join c in context.Childs on m.Child.Id equals c.Id into leftJoin 
      from x in leftJoin.DefaultIfEmpty() 
      select new 
       { 
        Id = x.Id, 
        Name = x.Name, 
        Child = x.Childs 
       }; 

Btwです。エンティティが他のエンティティからのPKの値を含むプロパティを持っている場合は、関係をEF designerに作成することができます。そのような場合は、ナビゲーションプロパティを使用することができます。

+0

私は同様の状況があります。親子はEF/DBに明示的な関連付けをしていません。そこで、Parent.partial.csクラスファイルにChildプロパティを追加しました。クエリセレクタを使用する方法がありますが、 'mを選択してEFがマスターオブジェクトを生成するように' - そして、何らかの方法で.Childプロパティをすべてインラインに設定して、EFが実際に子を返す結合を生成し、 ? (本質的に、フライで協会) – JoeBrockhaus

+0

..私は選択のような何かをしなければならない新しい{親=親、子供=子供} ..しかし、それは私がParentにそれを詰め込む多くのサイクルを費やさなければならないことを意味する:var results = q。選択(x => {var p = x.Parent; p.Children = x.Children; return p;}); (私はS/O質問http://j.mp/10tivJyでこれを持っています) – JoeBrockhaus

関連する問題