我正在使用EF代码第一种方法,并希望添加一个链接(地图)表。我正在处理以下示例并得到以下错误:
System.Data.Entity.Edm.EdmEntityType: : EntityType 'EmployeeDepartmentLink' has no key defined. Define the key for this EntityType.
问题是我不想在这张桌子上放一把钥匙,只是将两张桌子映射在一起:
public class Employee
{
[Key()]
public int EmployeeID;
public string Name;
}
public class Department
{
[Key()]
public int DepartmentID;
public string Name;
}
public class EmployeeDepartmentLink
{
public int EmployeeID;
public int DepartmentID;
}
我尝试了各种各样的事情,例如添加“[Key()]”属性,但是它没有意义,我将它添加到哪个字段?我想知道是否支持这种表模型?
答案 0 :(得分:13)
您正在尝试制作“多对多”映射。
要执行此操作,请编写以下代码:
public class Employee
{
[Key]
public int EmployeeId;
public string Name;
public List<Department> Departments { get; set; }
public Employee()
{
this.Departments = new List<Department>();
}
}
public class Department
{
[Key]
public int DepartmentId;
public string Name;
public List<Employee> Employees { get; set; }
public Department()
{
this.Employees = new List<Employee>();
}
}
然后,在DbContext
:
public class YourContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<Department> Departments { get; set; }
public YourContext() : base("MyDb")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Department>().
HasMany(c => c.Employees).
WithMany(p => p.Departments).
Map(
m =>
{
m.MapLeftKey("DepartmentId");
m.MapRightKey("EmployeeId");
m.ToTable("DepartmentEmployees");
});
}
}
答案 1 :(得分:1)
对于M:M relationship
,您必须创建您的加入(链接)类,如下所示。
public class EmployeeDepartmentLink
{
[Key, Column(Order = 0)]
public int EmployeeID;
[Key, Column(Order = 1)]
public int DepartmentID;
}
有关详细信息,请查看Create code first, many to many
我希望这会对你有所帮助。