Entity Framework Code First映射(关联)表?

4
我正在使用EF的Code First方法,并希望添加一个链接(映射)表。我正在参考以下示例,但遇到以下错误:
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()]"属性,但是它似乎没有被使用,而且我应该在哪个字段上添加它呢?我想知道这种表格模型是否被支持?


请查看此链接:https://dev59.com/BW035IYBdhLWcg3wVuh1 - Sampath
2个回答

15

您正在尝试创建“多对多”映射。

为执行此操作,请编写以下代码:

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
我知道在流畅的API中可以实现,而不需要创建第三个对象来表示映射表。 - Rhyous

2

对于 M:M 关系,您需要创建以下链接类(连接)。

public class EmployeeDepartmentLink
{
    [Key, Column(Order = 0)]
    public int EmployeeID;

    [Key, Column(Order = 1)]
    public int DepartmentID;

}

更多信息请查看Create code first, many to many

希望这对你有所帮助。


正是我所需要的! - user1882453

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接