2
我对MVC和EF代码第一次比较陌生,无法找到解决此问题的方法。.NET MVC 3/EF代码优先 - 添加相关实体
我已经使用EF代码首先创建2个实体,发票和InvoiceItem。一个发票可以有许多InvoiceItem实例。 InvoiceItem只能有一个Invoice实例。
代码片段如下:
public class Invoice
{
[ScaffoldColumn(false)]
public int InvoiceId { get; set; }
public string Description { get; set; }
public virtual ICollection<InvoiceItem> InvoiceItems { get; set; }
}
public class InvoiceItem
{
[ScaffoldColumn(false)]
public int InvoiceItemId { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:C}")]
public decimal Amount { get; set; }
public virtual Invoice Invoice { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Invoice>().HasMany(i => i.InvoiceItems);
modelBuilder.Entity<InvoiceItem>().HasRequired(i => i.Invoice);
}
作为一个测试,我只是想为下面的代码的发票创建一个InvoiceItem
if (ModelState.IsValid)
{
_repository.Add(invoice);
_repository.Save();
invoice.InvoiceItems.Add(new InvoiceItem {Amount = 99});
return RedirectToAction("Index");
}
当它到达invoice.InvoiceItems.Add()行,它会引发一个“未设置为对象实例的对象引用”。错误。
我错过了什么?
我知道:
通过在get {}如果它是空创建一个私有字段和initalise或者使InvoiceItems只读属性这是显而易见的,我失踪了。谢谢@santos第二个解决方案的工作就像一个魅力 - 除了我必须使公共财产虚拟。 – 2011-02-08 22:05:19