簡體   English   中英

Entity Framework Core 3.1.2 相關數據未通過 .Include() 返回

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM