[英]Entity Framework Core 3.1.2 related data not returned with .Include()
我的 2 個實體有一個簡單的一對多即父子關系。
public class Itinerary {
public Itinerary() {
CodeHours=new List<CodeHours>();
}
public int Id { get; set; }
public String FirstName { get; set; }
public String LastName { get; set; }
public DateTime DateWorked { get; set; }
public String EnteredBy { get; set; }
public List<CodeHours> CodeHours { get; set; }
}
public class CodeHours {
public int Id { get; set; }
public String Code { get; set; }
public float Hours { get; set; }
public Itinerary Itinerary { get; set; }
public int ItineraryId { get; set; }
}
public class DBContext : DbContext {
public DbSet<Itinerary> Itineraries { get; set; }
}
我正在像這樣從它的 DbSet 中檢索Itinerary
Itinerary itn = ctx.Itineraries.Where(i => i.FirstName == Model.FirstName
&& i.LastName == Model.LastName
&& i.DateWorked == row.Date
).Include(i => i.CodeHours)
.FirstOrDefault();
我得到了正確的Itinerary
但它的CodeHours
總是空的。 SQL Server Profiler 表示CodeHours
表從未包含在查詢中 奇怪的是我看到 2 個單獨的select
語句被發送到 SQL Server,即使我在我的代碼中只有 1 個針對 DbSet 的查詢。
將CodeHours
DbSet 添加到我的DbContext
沒有任何區別。
該應用程序是 ASP.NET MVC 5。EF Core 3 課程中的一個類似示例有效,但它是一個控制台應用程序,而不是 ASP.NET MVC
先感謝您。
不確定這是您問題的原因,但在您的Itinerary
類中, CodeHours
類型是錯誤的。 應該:
public ICollection<CodeHours> CodeHours { get; set; }
當您在內存中創建新實體時,可以在構造函數List<CodeHours>
其初始化為List<CodeHours>
,但是當您從數據庫中獲取時,EF 會將其自己的集合放在那里。
通過從頭開始創建一個新項目並從當前非工作項目中復制相關工件,我設法使代碼按原樣工作。 我認為當我最初添加 EF 6 但后來切換到使用 EF Core 3 時,該項目可能已損壞。不確定我是否在添加 EF Core 3 之前刪除了 EF 6。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.