我一直在su.Companies.Add(co)上得到一个NullReferenceException;线。 我认为,通过我的模型定义方式,它应该工作。自动完成,听起来像一个新手,完成这很好。我显然是EntityFramework的新手。
帮助?
using (var db = new TicketdocketEntities())
{
var su = new SiteUser { UserName = model.UserName };
db.SiteUser.Add(su);
var co = new Company { Name = "Hello" };
su.Companies.Add(co);
db.SaveChanges();
}
模特
public class Company
{
[Key]
public int CompanyId { get; set; }
public string Name { get; set; }
public virtual ICollection<SiteUser> SiteUsers { get; set; }
}
public class SiteUser
{
[Key]
public int SiteUserID { get; set; }
public string UserName { get; set; }
public virtual ICollection<Company> Companies { get; set; }
}
public class TicketdocketEntities : DbContext
{
public DbSet<Company> Companies { get; set; }
public DbSet<SiteUser> SiteUser { get; set; }
}
答案 0 :(得分:6)
您仍需要使用实际列表初始化该属性:
public class SiteUser
{
public SiteUser()
{
Companies = new List<Company>();
}
[Key]
public int SiteUserID { get; set; }
public string UserName { get; set; }
public virtual ICollection<Company> Companies { get; set; }
}
答案 1 :(得分:1)
对于可能遇到这个问题的其他人(正如我刚才所做的那样)......
使用实际列表初始化属性是修复NullReferenceException的正确方法。但是,正如marek_lani指出的那样,它不应该在模型本身内完成,因为所有SiteUser对象都有一个空的公司列表,然后需要填充。正确的方法,或者对我来说更好的方法是在su.Companies.Add()语句之前将相同的代码放在控制器操作中。
using (var db = new TicketdocketEntities())
{
var su = new SiteUser
{
UserName = model.UserName,
Companies = new List<Company>()
};
db.SiteUser.Add(su);
var co = new Company { Name = "Hello" };
su.Companies.Add(co);
db.SaveChanges();
}