我在 N 层应用程序中将 EF5 代码优先与 WCF 结合使用。
我在客户端和服务器之间异步和增量加载相关实体。一切运行良好,但我想做一些优化。
Car
考虑一个带有相关实体的虚构实体Wheel
:
public class Car
{
public int Id { get; set; }
public virtual List<Wheel> Wheels { get; set; }
}
public class Wheel
{
public int Id { get; set; }
public virtual int CarId { get; set; }
}
以及相关的 DTO:
public class CarDTO
{
public int Id { get; set; }
public virtual int CarId { get; set; }
public virtual List<int> Wheels { get; set; }
}
请注意,这Wheels
是 DTO 中的外键列表。我不需要Wheel
通过 Web 服务传输每个对象 - 如果需要,客户端将在稍后的 WCF 调用中加载它。现在我正在使用 AutoMapper 将相关实体扁平化为 FK 列表。
DbContext
这样做的问题是,我的 Web 服务在检索对象时并不总是需要加载整个 WheelCar
对象。无论如何,我不会通过 Web 服务发送它们(除非后来要求它们)。但是查询将整个 wheel 对象从数据库加载到 Web 服务调用中,然后被丢弃。如果有 100 个Wheels
per Car
,那么在 Web 服务和数据库之间流动的大量不必要的数据。
我想做的是更改Car
为这样的:
public class Car
{
public int Id { get; set; }
public virtual List<Wheel> Wheels { get; set; } // Normally empty
public virtual List<int> WheelIDs { get; set; } // Normally full
}
因此,当 Web 服务知道它需要Wheels
加载.Include(car => car.Wheel)
所有WheelIDs
.
EF5 会轻松做到这一点吗?如果是这样,怎么做?