实体框架 - 更新/添加现有值的值

时间:2015-12-07 14:18:43

标签: c# entity-framework

在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来解决它,但我一直在寻找更好的实现。

提前致谢。

2 个答案:

答案 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 });