多对多的关系没有回归孩子的结果

时间:2017-03-24 21:26:31

标签: c# entity-framework-core

我尝试使用关联表创建两个对象之间非常简单的多对多关系。

EntityFramework正确创建了关联表,但是当数据填充到表中时,返回的数据在连接上始终为null。

我按照文档概述创建的关系如下:

protected override void OnModelCreating(ModelBuilder builder)
{
  //-- setup many to many relationship joins
  builder.Entity<EmployeeTrade>()
        .HasKey(x => new { x.EmployeeId, x.TradeId });

  builder.Entity<EmployeeTrade>()
        .HasOne(t => t.Trade)
        .WithMany(et => et.EmployeTrades)
        .HasForeignKey(t => t.TradeId);

    builder.Entity<EmployeeTrade>()
        .HasOne(e => e.Employee)
        .WithMany(et => et.EmployeTrades)
        .HasForeignKey(e => e.EmployeeId);

  base.OnModelCreating(builder);
}

我的实体看起来如下:

员工:

Table(name: "employees")]
public class Employee 
{
    [Key]
    [Column]
    public int Id { get; set; }

    [Column]
    [Required]
    [MaxLength(32)]
    public string FirstName { get; set; }

    [Column]
    [Required]
    [MaxLength(32)]
    public string LastName { get; set; }

    public IList<EmployeeTrade> EmployeTrades { get; set; }
}

贸易:

[Table(name: "trades")]
public class Trade 
{
    [Key]
    [Column]
    public int Id { get; set; }

    [Column]
    [Required]
    [MaxLength(64)]
    public string Name { get; set; }

    [Column]
    [Required]
    public decimal PayRate { get; set; }

    [Column]
    [Required]
    public bool IsActive { get; set; }
    public IList<EmployeeTrade> EmployeTrades { get; set; }
}

例如,我对数据的具体如下:

雇员:

Id          FirstName  LastName
----------- ---------- ---------
1           James      Dean
2           Moo        Cow
3           Herp       Derp

交易:

Id          IsActive Name           PayRate
----------- -------- -------------- ---------
1           1        Carpenter      22.00
2           1        electrician    44.00
3           1        Plumber        55.00

EmployeeTrades:

EmployeeId  TradeId     Id
----------- ----------- -----------
1           1           1
1           2           2
1           3           3

在我尝试从用户1的数据库中提取数据之后,当EmployeeTrades集合应该是三个对象的集合时,EmployeeTrades集合始终为null,即便如此,实际上要告知返回的数据不是。甚至是我真正想要的数据,这是交易。

除了通过线路查询获取数据之外,我对如何解决这个问题感到有点失落。我希望EF可以为我做这么重的生活,但从我看到的情况并非如此,或者我做错了,我似乎无法看到。

1 个答案:

答案 0 :(得分:3)

默认情况下,实体框架永远不会急切地加载间接数据(不是表的直接字段的属性)。这意味着您必须使用Include功能手动添加EmployeTrades