【问题标题】:Dbcontext disposed when iterating resulting list迭代结果列表时释放的 Dbcontext
【发布时间】:2016-03-19 12:07:03
【问题描述】:

所以我想迭代一个从我的数据库中获取的列表,并在一个循环中通过一个一个地获取它们来将项目添加到一个新列表中:

List<BasketItem> items = ps.basketRepo.GetUserItems(User.Identity.GetUserId()).ToList<BasketItem>();
List<BasketVM> vms = new List<BasketVM>();
foreach (BasketItem item in items)
{
    BasketVM vm = new BasketVM();
    vm.CoreItem = item;
    vm.ItemToestel = ps.ToestelRepo.GetByID(item.BesteldToestelId);
    vms.Add(vm);
}
return View(vms.ToList<BasketVM>());

这会导致如下错误: “操作无法完成,因为 DbContext 已被释放。”

有什么办法可以解决这个问题吗? ,我也尝试在我的 linq 查询中使用 Include() 来一次性获取额外的对象:

using (context)
{
    var query = (from b in context.BasketItem.Include(t=>t.SelectedToestel) where b.UserId==uId select b);
    return query.ToList<BasketItem>();
}

但它不起作用,我是否需要在 BasketItem 和 Toestel 表之间设置一个外键才能正常工作?

谢谢

编辑:这里是涉及的模型

public class BasketItem
{
    public int Id { get; set; }
    public DateTime Timestamp { get; set; }
    public Toestel SelectedToestel { get; set; }
    public int BesteldToestelId { get; set; }
    public int Aantal { get; set; }
    public String UserId { get; set; }
}

public class Toestel
{
    public int Id { get; set; }
    public string Naam { get; set; }
    public string Omschrijving { get; set; }
    public double AankoopPrijs { get; set; }
    public double HuurPrijs { get; set; }
    public int Stock { get; set; }
    public string Afbeelding { get; set; }
    public List<OS> Os { get; set; }
    public List<Framework> Framework{ get; set; }

}

【问题讨论】:

  • 是的,你会导航属性。向您展示BasketItemToestel 的模型
  • 嘿斯蒂芬,我在编辑中添加了模型
  • 请出示您的ps.basketRepo.GetUserItems 方法。
  • 建议您通读this article以了解导航属性。
  • 我找到了解决问题的方法,感谢您的帮助:) 我会阅读导航属性!谢谢大家

标签: c# asp.net-mvc entity-framework linq


【解决方案1】:

在我的存储库中,我使用 Using 语句访问 Dbcontext,该语句在超出范围时处理上下文。

当迭代完成时,我没有编写 Using 语句并手动处理 Dbcontext(我的存储库中的字段)来解决这个问题。

这可能不是最干净的方式,但现在可以了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2018-01-24
    • 2022-01-24
    相关资源
    最近更新 更多