8

给定以下 POCO 类:

public class Certification {
    public int Id { get; set; }
    public virtual ICollection<Employee> CertifiedEmployees { get; set; }
}

public class Employee {
    public int Id { get; set; }
    public virtual ICollection<Certification> Certifications { get; set; }
}

使用 EF4 CTP4 代码优先方法创建数据库模型确实会创建所需的联结表:

CREATE TABLE [dbo].[Certifications_CertifiedEmployees](
[Certifications_Id] [int] NOT NULL,
[CertifiedEmployees_Id] [int] NOT NULL,
    ...

但是,表名和列名并不理想,因为它们是从关联的类属性名生成的。我宁愿有:

CREATE TABLE [dbo].[Employees_Certifications](
[Employee_Id] [int] NOT NULL,
[Certification_Id] [int] NOT NULL,
    ...

有谁知道在这种情况下是否可以更改生成的列名,并且可以选择更改表名,以便员工在认证之前?

谢谢,加里

4

2 回答 2

8

现在遇到这个问题并使用更新版本的 EF 的任何人都可能需要将最后一部分 @gxclarke 的答案更改为:

  .Map(
      m => {
          m.MapLeftKey("Employee_Id");
          m.MapRightKey("Certification_Id");
          m.ToTable("Employees_Certifications");
      }
   );

看起来好像方法参数已更改为仅接受操作而不是表名。

于 2012-08-09T11:41:48.953 回答
7

我使用 fluent API 来修改生成的联结表:

modelBuilder.Entity<Employee>()
    .HasMany(e => e.Certifications)
    .WithMany(c => c.Employees)
    .Map("Employees_Certifications", (e, c) => new { 
        Employee_Id = e.Id, 
        Certification_Id = c.Id });
于 2010-08-15T22:00:34.053 回答