我正在使用Entity Framework 7来映射我的应用程序的数据访问。
以下是我使用的课程示例:
[Table("class1")]
public class Class1
{
public int id { get; set; }
public int randomProp1 { get; set; }
public int randomProp2 { get; set; }
public ICollection<Class2> collectionClass2 { get; set; }
public ICollection<Class3> collectionClass3 { get; set; }
}
[Table("class2")]
public class Class2
{
public int id { get; set; }
public int idClass1 { get; set; }
public int randomProp { get; set; }
[ForeignKey("idClass1")]
public Class1 class1 { get; set; }
}
[Table("class3")]
public class Class3
{
public int id { get; set; }
public int randomProp { get; set; }
public int randomProp2 { get; set; }
public int idClass2 { get; set; }
[ForeignKey("idClass1")]
public Class1 class1 { get; set; }
public ICollection<Class4> collectionClass4 { get; set; }
}
[Table("class4")]
public class Class4
{
public int id { get; set; }
public int idClass3 { get; set; }
public int randomProp4 { get; set; }
[ForeignKey("idClass3")]
public Class3 class3 { get; set; }
}
我想要获得所有这些结构。为此,我有以下方法:
public List<Class1> GetAll()
{
return _ctx.Class1
.Include(x => x.collectionClass2)
.Include(x => x.collectionClass3)
.Include(x => x.collectionClass3.Select(c => c.collectionClass4))
.ToList();
}
但是,当我尝试执行此方法时,我得到以下异常:
类型&#39; System.InvalidCastException&#39;的例外情况发生在EntityFramework.Core.dll但未在用户代码中处理 附加信息:无法转换类型为&#39; Remotion.Linq.Clauses.Expressions.SubQueryExpression&#39;的对象输入&#39; System.Linq.Expressions.MemberExpression&#39;。
如果从查询中删除.Include(x => x.collectionClass3.Select(c => c.collectionClass4))
,它将检索数据,但嵌套在class3中的class4集合将作为null属性。
我还尝试将.ThenInclude(x => x.Select(c => c.collectionClass4))
放在互联网上的一些示例中,但它会出现以下异常:
类型&#39; System.ArgumentException&#39;的例外情况发生在EntityFramework.Core.dll但未在用户代码中处理 附加信息:属性表达式&#39; x =&gt; {来自Class3 c in x select [c] .collectionClass4}&#39;无效。表达式应代表属性访问权限:&#39; t =&gt; t.MyProperty&#39 ;.指定多个属性时,请使用匿名类型:&#39; t =&gt;新{t.MyProperty1,t.MyProperty2}&#39;。
答案 0 :(得分:1)
ThenInclude
位于Include
之后,表示必须同时包含嵌套对象:
.Include(x => x.collectionClass3)
.ThenInclude(x => x.collectionClass4)