2016-07-10 8 views
1

多対多リレーションシップを持つ2つのエンティティがあります。 CompanyおよびSearchKeyword。ここで多対多リレーションシップを作成できません

はモデルです:

class SearchKeyword 
{ 
    public int ID { get; set; } 
    public string Text { get; set; } 

    public virtual ICollection<Company> Companies { get; set; } 
} 

class Company 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 

    public virtual OtherDetail OtherDetails { get; set; } 
    public virtual ICollection<SearchKeyword> SearchKeywords { get; set; } 
} 

私は会社にSearchKeywordを追加しようとしていますが、それは私をさせません。私はこれを試みた:

using (var db = new PlaceDBContext()) 
{ 
    Company c = db.Companies.Single(x => x.ID == 1); 
    SearchKeyword sk = db.SearchKeywords.Single(x => x.ID == 1); 
    c.SearchKeywords.Add(sk); 
    db.SaveChanges(); 
} 

それはObject reference not set to an instance of an object.私は何がnullであるか分からない。インスペクタでは、cskの両方に完全な値があります。私は、多対多の関係がEFとどのように機能するかの基本を見逃しているに違いないと思います。

私は間違っていますか?

答えて

0

SearchKeywordsがnullであるためです。

あなたは

using (var db = new PlaceDBContext()) 
{ 
    Company c = db.Companies.Single(x => x.ID == 1); 
    SearchKeyword sk = db.SearchKeywords.Single(x => x.ID == 1); 
    c.SearchKeywords = new List<SearchKeyword>(); 
    c.SearchKeywords.Add(sk); 
    db.SaveChanges(); 
} 

それとも、コンストラクタメソッド

class Company 
{ 
    public Company() 
    { 
     SearchKeywords = new List<SearchKeyword>(); 
    } 

    public int ID { get; set; } 
    public string Name { get; set; } 

    public virtual OtherDetail OtherDetails { get; set; } 
    public virtual ICollection<SearchKeyword> SearchKeywords { get; set; } 
} 
+0

それを行うことができますおかげで新しいインスタンスを追加する前に、それにリストを割り当てることができますどちらか!それは – Guerrilla

+0

はいです。 Stackoverflowは、そのようなアクションが可能になる前に時間制限を実装します。私はできるだけそのようにします。 – Guerrilla

関連する問題