2016-11-04 19 views
0

3つのエンティティに基づいて3つのテーブルをコードファーストで流暢なAPIを使用して作成したいと考えています。 Entity Frameworkバージョン6を使用しています。結合テーブルには、3列の主キーと追加の列が必要です。3列の主キーを使用して多対多でテーブルを結合

私の質問:C#Fluent APIでコードファーストを使用してPatientTreatmentテーブルの3列の主キーを作成/マップするにはどうすればよいですか?ありがとうございました。

結合テーブルの3列の主キーの詳細{PatentId、TreatmentId、TreatmentDate}PatentIdTreatmentIdの値は、TreatmentDateの値が手動で入力されている間に他の2つのエンティティ(テーブル)から取得されます(たとえば、getdate()関数のようなC#コードまたはT-SQLスクリプト)。 3つのエンティティの

詳細:

public class Patient { 
    public long PatentId {get; set;} // database created using Identity 
    ... 
} 

public class Treatment { 
    public long TreatmentId {get; set;} // database created using Identity 
    ... 
} 

とテーブルを結合する(エンティティ)

public class PatientTreatment 
{ 
    public long PatentId {get; set;} // part of the primary key from the Patient entity 
    public long TreatmentId {get; set;} // part of the primary key from the Treatment entity 
    public DateTime TreatmentDate {get; set;} // part of the primary key but its value is from C# code or from T-SQL script, not from other entity (table) 
    // other fields ... 
} 

答えて

1

あなたはこれをモデル化することはできません チェック 関係多対多の関連でPatientTreatmentクラスが隠されています。これは、通常、Entity Frameworkマッピングで多対多と呼ばれています。

あなたが表示する明示的なPatientTreatmentクラスから明らかなように、あなたはそれを行うつもりはありませんでした。だからそれを正しくモデリングすることです。マッピングそうのようなあなたのDbContextサブクラス、セットアップのOnModelCreatingオーバーライドで

protected override void OnModelCreating(DbModelBuilder mb) 
{ 
    mb.Entity<PatientTreatment>() 
     .HasKey(x => new { x.PatientId, x.TreatmentId, x.TreatmentDate }); 
    mb.Entity<Patient>().HasMany(p => p.PatientTreatments) 
     .WithRequired().HasForeignKey(x => x.PatientId); 
    mb.Entity<Treatment>().HasMany(t => t.PatientTreatments) 
     .WithRequired().HasForeignKey(x => x.TreatmentId); 

    base.OnModelCreating(mb); 
} 

私は、この行HasKey(x => new { x.PatientId, x.TreatmentId, x.TreatmentDate })はあなたが主に探していたものですね。

0

私だけSERCHそれstackoverflowの中

それは多くを作成することはできません カスタマイズされた結合表との多対多の関係多対多の関係では、EFは ジョイン・テーブルを内部的に管理し、非表示にします。これは、モデル内にエンティティクラス のないテーブルです。追加 性質を持つように結合テーブルで作業するには、実際に作成する必要があります2一対多これはmany to many with extra column

関連する問題