2016-05-17 13 views
0

問題が発生しました。別のテーブルへの参照を持つテーブルがあり、別のテーブルへの参照リストがあります。すべてのことを熱望したいEntity Frameworkエンティティリスト内のエンティティリストの読み込み

public class User { 
    public ClassL1 l1 { get; set; } 
} 

ClassL1 { 
    public List<ClassL2> l2 { get; set; } 
} 

ClassL2 { 
    public List<ClassL3> l3 { get; set; } 
} 

ClassL3 { 
    //some basic string or int values 
} 

そして現在、私はこのようなもので、それをロードしようとしているんだけど、無駄に:

基本的には、アイデアがある

user = context.Users 
    .Where(u => u.UserName == model.Username) 
    .Include(u => u.l1) 
    .ThenInclude(l1 => l1.l2) 
    .ThenInclude(l2List => l2List.Select(l2Single => l2Single.l3))//This doesn't work 
    //.Include(u => u.l1.l2.Select(l2Single => l2Single.l3)) //Neither does this 
    .First(); 

私が想定していますどのようにロードするために選択が機能していない場合、リストのリスト?どんな助けもありがとう。

EDIT: どうやらこの上のオープンバグがあるので、まあ、私は愚かな修正を行って、それは次のように働かせた:

user = context.Users 
    .Where(u => u.UserName == model.Username) 
    .Include(u => u.l1) 
    .ThenInclude(l1 => l1.l2) 
    .First(); 
for (int i = 0; i < user.l1.l2.Count; i++) 
{ 
    user.l1.l2[i].l3 = context.l3DB 
    .Where(p => p.l2.Id == user.l1.l2[i].Id) 
    .ToList(); 
} 

そして、これが機能するために、私は参照を追加(親に)クラス内にある。

これはどう
user = context.Users 
    .Where(u => u.UserName == model.Username) 
    .Include(u => u.l1) 
    .ThenInclude(l1 => l1.l2) 
    .ThenInclude(l2 => l2.l3) 
    .First(); 

答えて

1

:例えば :この

public class ClassL2 { 
    public List<ClassL3> l3 { get; set; } 
    public ClassL1 l1 { get; set; }//reference to parent 
} 
+0

動作していないようです。 "型 'Microsoft.Data.Entity.Query.Internal.EntityQueryable'1 [ClassL3]'と 'System.Collections.Generic.List'1 [ClassL3]'の間に型変換演算子が定義されていません。" –

+0

これはあなたのマッピングの問題かもしれません。どのバージョンのEFを使用していますか? –

+0

"EntityFramework.Commands": "7.0.0-rc1-final" "EntityFramework.Core": "7.0.0-rc1-final" 私もそう思っていましたが、修正方法を見つけることができません、クラス名と同じ名前の1つの小道具を持っていましたが、それを変更しましたが、エラーは持続しました。私はこの問題に関するコードスニペットをアップロードすることができます。 –

0

チェックこれは動作しません

user = (from usr in context.Users 
     where usr.UserName == model.Username 
     select new 
     { 
      usr, 
      usr.l1, 
      l2List = from l2 in usr.l1.l2 
        select new 
        { 
         l2, 
         l2.l3 
        } 
     }).AsEnumerable().Select(m => m.usr).First(); 
+0

は、L2がリストされ、私は以来、そこからプロパティにアクセスすることはできませんそれは単一の要素ではありません。それは私の問題がどこにあるのか、それが簡単にうまくいくなら私は問題はないだろうが、今は最初に選択しなければならない。 –

関連する問題