有没有办法装饰你的POCO类来自动加载子实体而不必Include()每次加载时都使用它们?
假设我有一辆Class Car,车轮,门,发动机,保险杠,Windows,排气等的复杂类型属性.在我的应用程序中,我需要从我的DbContext 20个不同的地方加载我的汽车,不同的查询,等等.不希望每次我想加载我的汽车时都要指定我想要包含所有属性.
我想说
List<Car> cars = db.Car
.Where(x => c.Make == "Ford").ToList();
//NOT .Include(x => x.Wheels).Include(x => x.Doors).Include(x => x.Engine).Include(x => x.Bumper).Include(x => x.Windows)
foreach(Car car in cars)
{
//I don't want a null reference here.
String myString = car.**Bumper**.Title;
}
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式装饰我的POCO类或我的OnModelCreating()或在EF中设置一个配置,它会告诉它在我装车时加载我汽车的所有部件吗?我想热切地这样做,所以我的理解是让我的导航属性变得虚拟.我知道NHibernate支持类似的功能.
只是想知道我是否遗漏了什么.提前致谢!
干杯,
弥敦道
我喜欢下面的解决方案,但我想知道我是否可以嵌套对扩展方法的调用.例如,假设我与Engine有类似的情况,它有很多部分,我不希望包含在任何地方.我可以这样做吗?(我还没有找到一种工作方式).这样,如果以后我发现Engine需要FuelInjectors,我只能在BuildEngine中添加它,而不必在BuildCar中添加它.此外,如果我可以嵌套调用,如何将调用嵌套到集合中?想从我的BuildCar()中为每个轮子调用BuildWheel()?
public static IQueryable<Car> BuildCar(this IQueryable<Car> query) {
return query.Include(x => x.Wheels).BuildWheel()
.Include(x => x.Doors)
.Include(x => x.Engine).BuildEngine()
.Include(x => x.Bumper)
.Include(x => x.Windows);
}
public …Run Code Online (Sandbox Code Playgroud)