.Net Core Entity Framework .Include Eager load 不加载实体

Fre*_*idt 1 c# linq eager-loading .net-core

我的第一个问题 - 友善点:-)。

在下面的代码中,我尝试引用“Include(d)”实体(Schedules)来获取其 Name 属性。在 EF 6 中,“schedule”和“schedule_2”都返回正确的 Name 值。在 EF Core 中,“schedule”返回 NULL,“schedule_2”返回正确的 Name 值。

我不明白为什么我必须加载“时间表”列表。.Ininclude 是否不应该强制为每个选举强制加载时间表,以便每个选举时间表的名称属性可用于“时间表”分配?

// Relevant Model entities in database
//         DbSet<Election> Elections { get; set; }
//
// The following are the related classes defined in the database context...
public class Election
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Schedule> Schedules { get; set; }
}
public class Schedule
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; }
    public int? CfsElectionId { get; set; }
    public string Name { get; set; }

    [Required] // sets cascade delete
    [ForeignKey("CFSElectionID")]
    public virtual Election Election { get; set; }
}

class Program
{
    static void Main()
    {
        var db = new FfmsDbContext();
        var elections = db.Elections
            .Include(i => i.Schedules)
            .ToList();

        //The following returns NULL?
        var schedule = elections.First().Schedules?.First().Name ?? "NULL";

        var schedules = db.Schedules
            .ToList();

        //The following returns the correct Name property?
        var schedule_2 = elections.First().Schedules?.First().Name ?? "NULL";

        Console.WriteLine($@"sched: {schedule}");
        Console.WriteLine($@"schedules.First().Name: {schedules.First().Name}");
        Console.WriteLine($@"sched2: {schedule_2}");

        Console.WriteLine("Done...");
        Console.ReadLine();
    }
}

/*
  Output...
    sched: NULL
    schedules.First().Name: Candidates
    sched2: Candidates
    Done...
*/
Run Code Online (Sandbox Code Playgroud)

Fre*_*idt 7

事实证明,我的问题最终出现在课程的参考文献中。

我无意中选择了System.Data.Entity.Inclusion 作为提供的选择。

正确的参考应该是Microsoft.EntityFrameworkCore.

一旦我调整了参考,就.Include按预期工作了。