我有一个数据库,我可以存储订单。我希望获得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"数据库中的列表,所以我在列表中有原始数量。
答案 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
的不同实例来进行查询。