Соглашения об именах в сгенерированной таблице «многие ко многим» с использованием подхода EF4 CTP4 code first - PullRequest
8 голосов
/ 14 августа 2010

Учитывая следующие классы 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,
    ...

Кто-нибудь знает, возможно ли изменить сгенерированные имена столбцов в этом сценарии и, при желании, также изменить имя таблицы, чтобы сотрудники были перед сертификатами?

Спасибо, Gary

Ответы [ 2 ]

8 голосов
/ 09 августа 2012

Любой, кто сейчас спотыкается об этом и использует более новую версию EF, может изменить последний ответ @gxclarke на следующий раздел:

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

Похоже, параметры метода изменились, чтобы принять толькодействие, а не имя таблицы.

7 голосов
/ 16 августа 2010

Я использовал свободный 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 });
...