在迭代结果列表时处理Dbcontext

时间:2016-03-19 12:07:04

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

所以我想要迭代一个从我的Db中获取的List并在循环中通过逐个获取它们将项目添加到新列表中:

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和amp;之间设置一个外键?为此工作的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; }

}

1 个答案:

答案 0 :(得分:1)

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

在迭代完成后,我没有编写Using语句和手动处理Dbcontext (我的存储库中的字段),这让我不知所措。

这可能不是最干净的方式,但它现在有效!