在WebAPI中填充相关对象

时间:2017-03-27 13:34:00

标签: c# entity-framework asp.net-web-api2

我们正在使用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也没有工作。有没有办法预加载所有相关对象,或说服懒惰的提取机制工作?

我们通过自己加载数据库中的所有Level2Level3个对象来规避问题,但它相当难看。

0 个答案:

没有答案