ObjectContext实例已被释放,不能再用于需要连接的操作。 - 对于邪恶的实体

时间:2014-07-18 08:46:28

标签: entity-framework entity-relationship

以下是我的实体。

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

1 个答案:

答案 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