2016-05-17 3 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(); 
} 

И для этой работы, я добавил ссылки на (родителям) внутри классов. , например:

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

ответ

1

Как об этом:

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

Кажется, не работает. Я получаю сообщение об ошибке: «Оператор принуждения не определен между типами« 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» Я тоже так думал, но я не могу найти способ его исправить , имел одну пропуску, названную так же, как и имя класса, изменил ее, но ошибка сохранилась. Я мог бы загрузить фрагменты кода, касающиеся этой проблемы, если это поможет. –

0

Проверьте это:

user = context.Users 
    .Where(u => u.UserName == model.Username) 
    .Include(u => u.l1) 
    .ThenInclude(l1 => l1.l2) 
    .ThenInclude(l2 => l2.l3) 
    .First(); 
+0

Это не работает, l2 список, я не могу получить доступ к свойствам оттуда, так как это не один элемент. Вот где моя проблема, если бы это сработало так легко, у меня не было бы проблемы, но сейчас я должен выбрать в первую очередь. –

Смежные вопросы