实体框架代码第一张地图(链接)表?

时间:2013-01-21 13:34:27

标签: entity-framework entity-framework-4 entity-framework-4.1

我正在使用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()]”属性,但是它没有意义,我将它添加到哪个字段?我想知道是否支持这种表模型?

2 个答案:

答案 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

我希望这会对你有所帮助。