2017-10-21 55 views
-1

我有一个数据库,我可以存储订单。我想要获得金额大于0的所有订单,然后将数据库中的金额设置为0.问题是,当我想要设置数据库中的值时,当前选定订单的值也会被覆盖。Detatch从数据库Linq列表

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 

是否有可能从数据库中“列出”列表,所以我有列表中的原始数量。

+1

这不是问题,它是一个功能:)但严重的是,您可以在检索第一个列表时使用* no tracking query *,例如, 'var order = db.Orders.AsNoTracking()。Where(...)。ToList();' –

回答

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不同的情况下,做你的查询。