如何包含多个子对象?

时间:2015-11-16 14:23:17

标签: asp.net asp.net-mvc asp.net-web-api

我正在玩新的ASP.Net 5.0 WebApi,并且想要了解如何返回一个以上的子对象或孩子的孩子。

假设我有4个班级:

public class Car
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int TypeId { get; set; }
    public int ColourId { get; set; }

    public virtual Type Type { get; set; }
    public virtual Colour Colour { get; set; }
}

public class Type
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int TypeGroupId { get; set; }

    public virtual TypeGroup TypeGroup { get; set; }
}

public class Colour
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class TypeGroup
{
    public int Id { get; set; }
    public string Name { get; set; }
}

并且想要返回汽车的所有数据,包括Type,Color,甚至类型的TypeGroup。我该怎么做?

当我这样做时,它仅包括类型:

    [HttpGet]
    public IEnumerable<Car> Get()
    {
        return _dbContext.Cars.Include(c => c.Type);
    }

这是我在Startup.cs中的设置:

services.AddMvc().AddJsonOptions(options =>
        {
            options.SerializerSettings.ContractResolver =
                new CamelCasePropertyNamesContractResolver();
            options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        });

是否可以设置返回每个子对象和孙子等?

非常感谢

1 个答案:

答案 0 :(得分:3)

您可以在DbContext类中使用以下内容关闭所有实体的延迟加载(将其置于构造函数中):

this.Configuration.LazyLoadingEnabled = false;

这会为所有实体禁用它 - 所以要小心这一点并注意性能问题。

您可以加载特定类的所有实体的另一种方法是从属性声明中删除virtual关键字。