2017-10-21 54 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不同的情況下,做你的查詢。