无法创建多对多关系

时间:2016-07-10 07:35:14

标签: c# entity-framework

我有两个有多对多关系的人。 CompanySearchKeyword

以下是模型:

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合作的基础。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这是因为SearchKeywords为空。

您可以在添加新实例之前为其分配列表

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; }
}