0

これはどこかで説明されていますが、私は見つけることができません。私は正しい検索条件を使用していないと思います。多対多リレーションシップとコード内の列のコンポジットプライマリキー

基本的に私はPOCOとして定義した多対多テーブルを持っています。もしあなたが望むなら、2対1の関係を持つテーブルとしてそれを見ることもできます。

一方の端には、もう一方の端にユーザーテーブルと除算テーブルがあります。しかし、各ユーザー部門のコンボは、年ごとに1つずつ、複数の関係を持つことができます。したがって、関連テーブルでは年のint列があり、主キーはUserId fk、DivisionId fkおよびYearからのコンポジットになります。

EF 4.1コードファーストでこれを行う方法がわかりませんでした。私はDataAnnotationの方法とFluentApiの方法があることを望んでいます。

これをカバーするチュートリアルに私を指摘できたら、本当にうれしいでしょう。

ユーザー:

public class User 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 

    //some other properties 

    public virtual ICollection<DivisionService> Services { get; set; } 
} 

部門:

public class Division 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int DivisionId { get; set; } 

    //some other properties 

    public virtual ICollection<DivisionService> Services { get; set; } 
} 

は/メインテーブルに参加:

public class DivisionService 
{ 
    public int Year { get; set; } //this and the two foreign keys should be composite Primary Key 

    //some other properties 

    public virtual User User { get; set; } 
    public virtual Division Division { get; set; } 
} 

答えて

2

あなたはFluentAPIでHasKeyメソッドを使用して.HasKey(x => new { x.Year, x.UserId, x.DivisionId })を呼び出すことができます。データアノテーションを使用すると、これらの3つのプロパティで[Key]属性を指定するだけです。

+0

[Key]をUserプロパティとDivisionプロパティに追加することができ、EFはそれをそのテーブルのfkとして認識しますか? –

+0

いいえ、 '[Key]'はPKについてです。年との結合テーブルを使用する場合は、関連付けを2つの1-Nとして設定するか、PKの年の部分を設定する必要があります。ペイロードとの関連付けはサポートされていません。 –

+0

それは私が言っていることです。私は、UserIdとDivisionIdに[Key]属性をDivisionServiceの外部キーと同じように置くべきだと言いましたが、私はそれらを定義しません。だから私はそれらをプロパティに置くことができ、コード・ファーストはそれをFKフィールドとして理解していますか? –