[英]EF Eager load related entities from related entity
我在急於加載復雜的關系類型時遇到困難。 考慮我的實體:
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();
僅包括對您正在做的事情的投影的作品。
在您的情況下,您正在定義Ownership
包含,但是在投影Device
上沒有定義任何包含(例如, .Include(o => o.Device.License)
不計在內)。
您可能可以執行此操作(但我尚未對其進行測試):
return context.Ownerships
.Where(o => o.Owner.UserName == userName)
.Select(o => o.Device)
.Include(d=>d.License)
.ToList();
如果沒有扭轉您查詢的方式,例如:
return context.Devices
.Include(d => d.License)
.Where(d => d.Ownerships.Any(o=>o.Owner.UserName == userName))
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.