从数据库中删除Linq列表

时间:2017-10-21 14:54:50

标签: c# entity-framework linq

我有一个数据库,我可以存储订单。我希望获得Amount大于0的所有Orders,然后将数据库中的Amount设置为0.问题是当我想在数据库中设置值时,当前所选订单的值也会被覆盖。

var order = db.Orders
              .Where(x => x.Amount > 0)
              .ToList();                //all Orders with an Amount > 0

 db.Orders
   .Where(x => x.Amount > 0)
   .ToList()
   .ForEach(x => x.Amount = 0);        //after this line the Amount of the Orders in my List is 0

是否可以" detatch"数据库中的列表,所以我在列表中有原始数量。

1 个答案:

答案 0 :(得分:2)

正如@IvanStoev所说,您可以使用AsNoTracking()告诉entityframework不要监控您的第一个查询

var order = db.Orders
          .Where(x => x.Amount > 0)
          .AsNoTracking()
          .ToList();             

 db.Orders
   .Where(x => x.Amount > 0)
   .ToList()
   .ForEach(x => x.Amount = 0);    

或者您可以使用DbContext的不同实例来进行查询。