2012-11-21 47 views
1

我正在使用带有EF代码第一种方法的MVC 4。我有两个简单的对象。这些是他们的POCO类别:在MVC中创建具有多对多关系的对象4

public class Activity 
{ 
     //Primitive Properties 
     [HiddenInput] 
     public int Id { get; set; } 

     [Required] 
     public int LengthInMinutes { get; set; } 

     public string AdditionalInfo { get; set; } 

     [Required] 
     public bool Archive { get; set; } 

     //Navigation Properties 
     public virtual User User { get; set; } 
     public virtual ActivitySet ActivitySet { get; set; } 
     public virtual ICollection<Company> Companies { get; set; } 
     public virtual ICollection<Description> Descriptions { get; set; } 
} 

public class Company 
{ 
     //Primitive Properties 
     [HiddenInput] 
     public int Id { get; set; } 

     [Required] 
     public string Title { get; set; } 

     [Required] 
     public bool Archive { get; set; } 

     //Navigation Properties 
     public virtual ICollection<Activity> Activities { get; set; } 
} 

因此,活动和公司实体之间存在多对多关系。我在我的仓库类创建新的活动,但是当我分配一个公司的活动,像这样:

activity.Companies.Add(company); 

我得到NullReference例外。我环顾四周,但根据此链接:

BuildStarted.com

我的做法似乎是正确的。

它为什么不工作?

回答

0

在您可以使用公司的Add()之前,它需要被初始化。

activity.Companies = new List<Company>(); 

你也可以在Activity的构造函数中初始化它。

public class Activity 
{ 
    public Activity() 
    { 
     Companies = new List<Company>(); 
     Descriptions = new List<Description>(); 
    } 

    //Primitive Properties 
    [HiddenInput] 
    public int Id { get; set; } 

    [Required] 
    public int LengthInMinutes { get; set; } 

    public string AdditionalInfo { get; set; } 

    [Required] 
    public bool Archive { get; set; } 

    //Navigation Properties 
    public virtual User User { get; set; } 
    public virtual ActivitySet ActivitySet { get; set; } 
    public virtual ICollection<Company> Companies { get; set; } 
    public virtual ICollection<Description> Descriptions { get; set; } 
} 
+0

太棒了,非常感谢! – Bartosz