我遇到了一个问题:我有一个表引用了另一个表,它有一个引用另一个表的引用列表,它有另一个引用列表,而我想要加载所有这一切。实体框架急切加载实体列表内的实体列表
基本上,这个想法是:
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();
我怎么加载列表的列表,如果选择不工作?任何帮助,将不胜感激。
编辑: 好,因为显然是在这个开放的错误,我去一个愚蠢的修复,并使其像这样的工作:
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
}
似乎不起作用。我收到一个错误: “在'Microsoft.Data.Entity.Query.Internal.EntityQueryable'1 [ClassL3]'和'System.Collections.Generic.List'1 [ClassL3]'类型之间没有定义强制操作符。” –
也许这是你映射的问题。你使用哪个版本的EF? –
“EntityFramework.Commands”:“7.0.0-rc1-final” “EntityFramework.Core”:“7.0.0-rc1-final” 我也这么认为,但我找不到解决方法,有一个名字与它的名字相同,改变了这一点,但错误仍然存在。如果这有什么帮助的话,我可以上传关于这个问题的代码片段。 –