Detatch从数据库Linq列表
问题描述:
我有一个数据库,我可以存储订单。我想要获得金额大于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
是否有可能从数据库中“列出”列表,所以我有列表中的原始数量。
答
为@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
不同的情况下,做你的查询。
这不是问题,它是一个功能:)但严重的是,您可以在检索第一个列表时使用* no tracking query *,例如, 'var order = db.Orders.AsNoTracking()。Where(...)。ToList();' –