我尝试使用关联表创建两个对象之间非常简单的多对多关系。
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可以为我做这么重的生活,但从我看到的情况并非如此,或者我做错了,我似乎无法看到。