2012-02-26 8 views
0

そうです。私はこれを持っています。 2クラス。そのようなお互いの項目のリストを両方:簡単のためにエンティティフレームワークコードの最初の多対多節約問題

public class Bestelling 
    { 
     public virtual ICollection<Gerecht> Gerechten { get; set; } 
    } 
    public class Gerecht 
    { 
    public virtual ICollection<Bestelling> Bestellingen { get; set; } 
    } 

私は、今の混乱

の残りの部分を削除し、私のコードでこれらの「gerechten」(オランダ語のため申し訳ありません:D)です特定の「奨励」に加わった。 しかし、同じIDを持つ 'gerechten'はリストに2回(またはそれ以上)保存されません。

+3

同じIDのアイテムは一度保存する必要があります。期待どおりの結果と実際の結果をDbで詳しく説明できますか? –

答えて

1

コードファーストの多対多の関係では、複合キーが2つの別々のオブジェクト間で使用されます。したがって、中間テーブル(オブジェクト・モデルを使用して情報にアクセスするため必ず表示されるわけではありません)では、好きなだけ多くのGerechtとBestellenを組み合わせることができます。アイテムは一意である(複合キーと考える)。 GerechtとBestellingenの間に追加の関係を作成しようとすると、別の一意の識別子がある場合に限り、これを行うことができます。その場合は、適切な複合キーとともに追加のオブジェクトを作成する必要があります。

例(オランダ語で申し訳ありません...慣れていないので、私は英語の例を使用します):PersonCourseにおける3つの列の組み合わせが一意であるよう

public class Person 
{ 
    public int PersonID { get; set; } 

    public virtual ICollection<PersonCourse> PersonCourses { get; set; } 
} 

public class Course 
{ 
    public int CourseID { get; set; } 

    public virtual ICollection<PersonCourse> PersonCourses { get; set; } 
} 

public class PersonCourse 
{ 
    [Key, Column(Order = 0)] 
    public int PersonID { get; set; } 
    [Key, Column(Order = 1)] 
    public int CourseID { get; set; } 
    [Key, Column(Order = 2)] 
    public int AnotherUniqueParameter { get; set; } 

    // Navigation Properties 
    public virtual Person { get; set; } 
    public virtual Course { get; set; } 
} 

限り、あなたはできるだけ多くを追加することができますあなたが望むように特定の人とコースの関係。もちろん、この中間テーブルを使用することはこの状況でのみ必要です。それ以外の場合は、既に行っていることは正しいです(少なくとも私はあなたの質問に基づいて伝えることができます)。

+0

同じことを考えていた。これを指摘するためのThx。これほど簡単ではないとは思わなかった^^。 – Nick

関連する問題