在以前使用旧版本的实体框架的努力中,我习惯于使用急切加载 - 所以你得到你的根实体,然后根据使用“包含”的要求收集相关实体。
在我当前的项目中,我们使用数据库优先在新数据库上实现了最新版本的 EF。以这堂课为例:
public partial class Zone
{
public Zone()
{
this.OverrideCharges = new HashSet<OverrideCharge>();
}
public System.Guid RowId { get; set; }
public string Name { get; set; }
public virtual ICollection<OverrideCharge> OverrideCharges { get; set; }
}
OverrideCharges 对象在其下还有许多子属性,在这些子属性下还有相关实体。
我们有两个上下文,实际的 DB 上下文和一组 DTO 上下文。后者的对象主要是前者的副本 - Zone_dto 对象几乎是原始对象的克隆。在这两种情况下,我都使用以下方法关闭了延迟加载:
public CContext(): base("BreezeMetaData")
{
this.Configuration.LazyLoadingEnabled = false;
}
public UDBEntities()
: base("name=UDBEntities")
{
this.Configuration.LazyLoadingEnabled = false;
}
现在,我通过执行以下操作查询我的 Zone 对象:
public List<Zone_dto> GetZones()
{
List<Zone> zones = _cilContext.Zones.ToList();
List<Zone_dto> zone_dtos = new List<Zone_dto>();
foreach (Zone zn in zones)
{
zone_dtos.Add(Mapper.Map<Zone, Zone_dto>(zn));
}
return zone_dtos;
}
所以 - 不包括。并且延迟加载被禁用。我希望得到一个 Zone 对象及其直接属性的列表,但不是任何相关实体。
但是我得到的是 Zone 对象,加上它们所有的 OverrideCharges,加上所有与这些 OverrideCharges 相关的实体等等,一直沿树向下。
这些数据对象并不庞大,也不是什么大问题。但是我很沮丧,因为我不明白为什么要取回我没有要求的所有数据。有人可以解释吗?