我急切地加载复杂的关系类型时遇到了困难。考虑我的实体:
public class User
{
public string UserName { get; set; }
}
public class Ownership
{
public User Owner { get; set; }
public Device Device { get; set; }
}
public class Device
{
public License License { get; set; }
}
假设所有实体都在单独的表中。我遗漏了所有非必要的约定代码。我可以在需要时发布更多内容。
我的查询:
var result = return context.Ownerships
.Include(o => o.Device.License)
.Where(o => o.Owner.UserName == userName)
.Select(o => o.Device).ToList();
但这导致所有设备的null
价值许可证。但是,如果我像这样定义许可证:
public class Device
{
public virtual License License { get; set; }
}
并且像这样查询:
var result = return context.Ownerships
.Where(o => o.Owner.UserName == userName)
.Select(o => o.Device).ToList();
它可以工作(设备的许可证不是null
)但是我默认不是延迟加载。这些实体在休息时提供服务,因此,通过序列化,我获得了每个设备的许可证信息,我查询的是我不需要的线路上的大量数据。
任何提示?
解决方案
var result = return context.Ownerships
.Where(o => o.Owner.UserName == userName)
.Select(o => o.Device)
.Include(d => d.License)
.ToList();
答案 0 :(得分:1)
仅包括对您正在进行的事物投影的工作。
在您的情况下,您定义了again
上的包含,但预测while
没有定义任何包含(例如Ownership
不计算在内)。
您可以这样做(但我还没有测试过):
Device
如果没有改变您查询的方式,例如:
.Include(o => o.Device.License)