使用实体框架获取3个分层对象

时间:2014-05-29 19:54:09

标签: c# entity-framework

如果我有一个包含汽车列表的制造商对象,并且汽车对象有一个功能列表,我如何返回包含所有汽车列表的制造商对象,该列表中的每辆汽车都包含一个列表特征。我在网上看到的每个例子都使用了一个2层的对象。这是我所拥有的,它返回制造商和汽车列表,但每辆汽车返回0结果的功能列表

        Manufacturer man = new Manufacturer();
        using (MyEntities db = new MyEntities())
        {
            man= (from m in db.Manufacturer.Include("Cars")
                    where m.Name.Trim().Equals("Ford")
                    select m).FirstOrDefault();
        }
        return man;

1 个答案:

答案 0 :(得分:1)

如果您想使用延迟加载,只需将导航属性声明为'虚拟'

如果您想要加载所有相关对象,可以使用Includes:

.Include("Cars").Include("Cars.Features")
该方法的一个缺点是查询执行起来可能很昂贵。原因是将使用多个连接,并且生成的服务器答案的大小可能非常大。

您可以使用此策略加载一个级别:

    Manufacturer man = new Manufacturer();
    using (MyEntities db = new MyEntities())
    {
        man= (from m in db.Manufacturer
                where m.Name.Trim().Equals("Ford")
                select m).FirstOrDefault();

        models = man.SelectMany(m => m.Cars);

        features = models.SelectMany(m => m.Features);

        man.Load();
        models.Load();
        features.Load();
    }
    return man;