我们正在使用Entity Framework 6处理WebAPI应用程序。我们有几个类似于这些的类:
class Level0:
public virtual IList<Level1> Level1s {get; set;}
class Level1:
public int ParentId {get; set;}
public virtual Level0 Parent { get; set; }
public int Level2Id {get; set;}
public virtual Level2 Level2 {get; set;}
class Level2:
public int Level3Id { get; set;}
public virtual Level3 Level3 {get; set;}
class Level3: ...
前端传递Level0,其JSON如下所示:
{
Level1s: [
{ Level2Id: 4 },
{ Level2Id: 12 },
]
}
模型绑定器确实作为Level0
实例提供。它有一个带有两个元素的Level1s
列表,两个元素都设置了Level2Id
属性,并且两个ID在数据库中都有相应的记录。但是,Level2
属性为null,即使它是虚拟的,我们也无法执行以下操作:
level0.Level1s.Where(l1=>l1.Level2.Level3.SomeProp==5).Sum(...)
我们收到异常,因为l1.Level2
为空。
好像懒惰的获取机制没有启动。删除virtual
也没有工作。有没有办法预加载所有相关对象,或说服懒惰的提取机制工作?
我们通过自己加载数据库中的所有Level2
和Level3
个对象来规避问题,但它相当难看。