2011-07-22 9 views
0

私は2つのEntity Framework Code First POCOを持っています。新しいサイトとテクノロジーのアイテムをデータベースに簡単に挿入できますが、サイトとテクノロジを関連付けることはできません。私がこれをするとき...EFコード最初:結合テーブルが空です

if(!site.Technologies.Any(o => (o.Name == technology.Name && technology.Source == source))) 
{ 
    site.Technologies.Add(technology); 
    technology.Sites.Add(site); 
} 

重複するキーエラーが発生します。私が条件文から2行目を削除した場合、結合テーブルTechnologiesSitesはレコードを取得しません! EFコードファーストではどのように挿入するのですか?

public class Site 
{ 
    public Site() 
    { 
     Technologies = new HashSet<Technology>(); 
    } 

    [Key] 
    public string Hostname { get; set; } 
    public virtual ICollection<Technology> Technologies { get; set; } 
} 

public class Technology 
{ 
    [Key, Column(Order = 0)] 
    public string Name { get; set; } 
    [Key, Column(Order = 1)] 
    public string Source { get; set; } 
    public virtual ICollection<Site> Sites { get; set; } 

    public Technology() 
    { 
     Sites = new HashSet<Site>(); 
    } 
} 
+0

あなたは私たちあなたの状態によって生成されたクエリを示しすることはできますか? (ヒント、変数を条件に格納して、Visual Studioのデバッグに役立ちます。var query = site.Technologies.Where(.......)) – Polity

+0

サイトとテクノロジの使い方を表示または説明します。それらは同じコンテキストインスタンスから読み込まれますか? –

答えて

0

あなたは両方の方向をチェックする必要があります。

if(!site.Technologies.Any(o => (o.Name == technology.Name && technology.Source == source)) && 
!technology.Sites.Any(x => x.Hostname == site.Hostname) 
) 
{ 
    site.Technologies.Add(technology); 
    technology.Sites.Add(site); 
} 
関連する問題