c# - 迭代结果列表时释放 Dbcontext

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

所以我想重复从我的 Db 中获取的列表,并在循环中通过一个一个地获取项目来将项目添加到新列表中:

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

}

最佳答案

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

我通过不编写 Using 语句和在迭代完成时手动处理 Dbcontext(我存储库中的字段)来解决这个问题。

这可能不是最简洁的方法,但现在可以了!

关于c# - 迭代结果列表时释放 Dbcontext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36101509/

相关文章:

asp.net-mvc - ASP.NET MVC - 模型可以有业务逻辑吗?

asp.net - 何时使用Request.RegisterForDispose?

asp.net-mvc - 使用 asp.net mvc 将 Http 重定向到 Https 和 SEO

c# - 如何查询基于双列为 "close to"某个值的数据集?

javascript - 在 BreezeJs 中查询按属性区分的实体

c# - 如何在不覆盖的情况下将内容粘贴到文本框中

多个 LIST<> 类型上的 C# FOREACH

c# - MVC 从缓存或旧数据库中提取数据

c# - 使用 .NET 4.6 验证 xml 时出现 NullReferenceException

c# - 翻译 API 用户速率限制无故超出 [403]