在Entity Framework中,是否可以在数据库中为现有值添加值? 目前我有这个:
var ent = this.repository.GetSingle(id);
var moreQuantity = 5; // This is calculated in application logic
ent.quantity = ent.quantity + moreQuantity;
this.repository.SaveChanges();
可以在单个数据库交互中执行相同的操作吗?我在SQL中的意思是这样的:
UPDATE table SET quantity = quantity + {moreQuantity} WHERE id = {id}
不使用ExecuteSqlCommand或ExecuteStoreQuery。
我问这个的原因是因为我的应用程序中的GetSingle和SaveChanges之间存在大量时间,所以我遇到了一些并发问题。我设法用RowVersion和ConcurrencyCheck来解决它,但我一直在寻找更好的实现。
提前致谢。
答案 0 :(得分:2)
有一个很好的图书馆EntityFramework.Extended
安装并写下:
context.repository.Update(e => e.id == id, e2 => new entity { quantity = e2.quantity + moreQuantity });
答案 1 :(得分:1)
当前版本的EntityFramework Extended(6.1)已弃用已接受答案中指示的过载。现在应该分离过滤和实际更新。这是一件好事,因为过滤可以很容易地动态构建。
对于实际问题,查询应如下所示:
context.repository
.Where(e => e.id == id)
.Update(e2 => new entity { quantity = e2.quantity + moreQuantity });