使用Entity Framework更新语句

8

简单的问题,当更新一个实体时,使用Entity Framework是否有可能实现这个查询?

update test set value = value + 1 where id = 10
4个回答

11
使用Entity Framework Extended Library的批量更新功能,可以按如下方式进行:
dbContext.Tests.Update(t => t.Id == 10, t => new Test() { Value = t.Value + 1 });

MutantNinjaCodeMonkey在另一个回答的评论中提到了这个库。我发现这个库非常符合要求,值得在自己单独的答案中引起关注。 - Edward Brey

5

这种形式不行。

您需要选择所有符合条件的实体,对它们进行循环并更新它们。

如果您想要在数据库中正确地执行此操作,因为您的数据集可能非常大,您将需要直接使用SQL。(我不记得EF是否有像Linq To SQL那样直接执行UPDATE查询的方法)。


正如我所猜测的那样,我将使用存储过程。 - Drevak
8
你可以使用这个链接:http://weblogs.asp.net/pwelter34/archive/2011/11/29/entity-framework-batch-update-and-future-queries.aspx,它可以帮助你进行实体框架批量更新和未来查询。 - MutantNinjaCodeMonkey

3
应该还是可以实现的,只是一般要更加受限制。
var myEntity = context.First(item => item.id == 10);
myEntity.value += 1;
context.SaveChanges();

应该会生成类似的SQL语句,您可以观察分析器以查看实际生成的SQL语句,但它应该非常类似于您的语句。


4
EF 生成的 SQL 与原始语句有很大不同:它由两个非原子性的 SQL 语句组成。 - Edward Brey

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接