我正在玩新的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;
});
是否可以设置返回每个子对象和孙子等?
非常感谢
答案 0 :(得分:3)
您可以在DbContext
类中使用以下内容关闭所有实体的延迟加载(将其置于构造函数中):
this.Configuration.LazyLoadingEnabled = false;
这会为所有实体禁用它 - 所以要小心这一点并注意性能问题。
您可以加载特定类的所有实体的另一种方法是从属性声明中删除virtual
关键字。