使用实体框架更新语句

Posted

技术标签:

【中文标题】使用实体框架更新语句【英文标题】:Update statement with Entity Framework 【发布时间】:2010-10-13 17:05:11 【问题描述】:

简单的问题,是否可以在更新一个实体时使用 Entity Framework 实现此查询?

update test set value = value + 1 where id = 10

【问题讨论】:

【参考方案1】:

使用Entity Framework Extended Library 的批量更新功能,如下所示:

dbContext.Tests.Update(t => t.Id == 10, t => new Test()  Value = t.Value + 1 );

【讨论】:

MutantNinjaCodeMonkey 在对不同答案的评论中提到了这个库。我发现图书馆非常符合要求,因此值得在其单独的答案中引起注意。【参考方案2】:

这个表格下没有。

您必须选择所有符合您的条件的实体,遍历它们并更新它们。

如果您正在寻找可以在数据库中正确执行的操作,因为您的集合可能很大,您将不得不直接使用 SQL。 (我不记得 EF 是否有办法像 Linq To SQL 那样直接执行 UPDATE 查询)。

【讨论】:

正如我所怀疑的,我将使用存储过程 或者你可以使用这个:weblogs.asp.net/pwelter34/archive/2011/11/29/…【参考方案3】:

应该是,一般情况下会受到更多限制。

var myEntity = context.First(item => item.id == 10);
myEntity.value += 1;
context.SaveChanges();

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

【讨论】:

EF 生成的 SQL 完全不同:两条 SQL 语句,不是原子的。

以上是关于使用实体框架更新语句的主要内容,如果未能解决你的问题,请参考以下文章

在实体框架 6 中更改数据库

《Entity Framework 6 Recipes》中文翻译系列 (12) -----第三章 查询之使用SQL语句 (转)

为啥实体框架不能在 LINQ 语句中使用 ToString()?

存储更新、插入或删除语句影响了意外的 > 行数 (0)

获取实体框架 6 在其下面的 SELECT 语句中使用 NOLOCK

调试实体框架 SQL 语句