【问题标题】:Entity Framework Core 3.1.2 related data not returned with .Include().Include() 未返回 Entity Framework Core 3.1.2 相关数据
【发布时间】:2020-03-25 18:46:33
【问题描述】:

我的 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,没关系,但是你是不是也初始化了CodeHours .Itinerary

标签: c# asp.net-mvc-5 entity-framework-core-3.1


【解决方案1】:

不确定这是您问题的原因,但在您的 Itinerary 类中,CodeHours 类型是错误的。应该是:

public ICollection<CodeHours> CodeHours { get; set; }

当您在内存中创建新实体时,可以在构造函数中将其初始化为 List&lt;CodeHours&gt;,但是当您从数据库中获取时,EF 会将其自己的集合放入其中。

【讨论】:

  • 虽然使用collection&lt;T&gt; 可能更好,但使用List&lt;T&gt; 并对其进行初始化对于EF 来说是完全可以的。
【解决方案2】:

我设法让代码按原样工作,方法是从头开始创建一个新项目并从当前非工作项目中复制相关工件。我认为当我最初添加 EF 6 但后来切换到使用 EF Core 3 时,该项目可能已经损坏。不确定我是否在添加 EF Core 3 之前删除了 EF 6。

【讨论】:

    猜你喜欢
    • 2020-06-30
    • 2019-02-05
    • 1970-01-01
    • 2021-12-03
    • 2023-04-02
    • 2019-02-23
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    相关资源
    最近更新 更多