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

流暢な 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 に答える