以下是我的实体。
public class Expense
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ExpenseId { get; set; }
[Required]
public int CategoryId{ get; set; }
[ForeignKey("CategoryId")]
public virtual Category Category { get; set; }
public virtual List<EditedExpense> EditedExpenses { get; set; }
}
public class EditedExpense
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int EditedExpenseId { get; set; }
[Required]
public int CategoryId{ get; set; }
[ForeignKey("CategoryId")]
public virtual Category Category { get; set; }
public int ExpenseId { get; set; }
}
public class Category
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int CategoryId{ get; set; }
public string Title
public virtual List<Expense> Expenses { get; set; }
public virtual List<EditedExpense> EditedExpenses { get; set; }
}
我已使用此代码获取所有Expanses和EditedExpanses
var expenses = db.Expenses.Include(exp => exp.EditedExpenses).Include(exp => exp.Category);
return View(expenses.ToList());
现在我想使用两个foreach循环遍历所有Expanses和它们的EditedExpanse,但是当它试图获取EditedExpense的类别时会抛出异常:
foreach(exp in expansesList)
{
foreach(editedExp in exp.EditedExpanses)
{
<text>@editedExp.Category.Title</text>
}
}
答案 0 :(得分:2)
var expenses = db.Expenses
.Include(exp => exp.EditedExpenses)
.Include(exp => exp.Category);
这包括Category
的{{1}}属性,而不是Expense
的属性。
使用:
EditExpense
编辑: 只是为了澄清你遇到的异常:你当前正在使用延迟加载,因此一旦你的EF上下文被处置,你就不能延迟加载导航属性。作为旁注,我总是建议停用延迟加载。见https://stackoverflow.com/a/21379510/870604