【问题标题】:Updating a set of records in LINQ - All at once在 LINQ 中更新一组记录 - 一次全部更新
【发布时间】:2014-09-10 16:21:59
【问题描述】:

我有几条记录都需要更新为相同的值。如果我只是使用 ADO.NET,我可以调用一个存储过程来一次更新它们...

UPDATE myTable
SET myColumn = "XXXXXX"
WHERE filterColumn == 'YYY'

但是由于我使用的是实体框架,我想知道它们是否是一种类似的方式来一次更新一组记录,而不必遍历每个值并单独设置它们?目前我正在使用..

from s in myTables
where s.filterColumn == 'YYY'
select s;

var results = s.ToList();

foreach (i in results){
  s.myColumn = "XXXXXX"
}

有没有办法像在 SQL 中一样一次性设置所有值?

我正在使用实体框架 v6.1

【问题讨论】:

标签: linq entity-framework linq-to-entities


【解决方案1】:

使用 Entity Framework 时仍然可以执行 sql 命令。这是怎么做的。

dbContext.Database.Connection.Open();
var cmd = dbContext.Database.Connection.CreateCommand();

cmd.CommandText = @"UPDATE myTable
SET myColumn = @myColumn
WHERE filterColumn = @filterColumn";

cmd.Parameters.Add(new SqlParameter("myColumn", "XXXXXX"));
cmd.Parameters.Add(new SqlParameter("filterColumn", "YYY"));
cmd.ExecuteNonQuery();

【讨论】:

【解决方案2】:

实体框架扩展库包含批量更新/删除功能:
https://github.com/loresoft/EntityFramework.Extended

myTables.Update(
    s => s.filterColumn == "YYY",
    s => s.myColumn = "XXXXXX");

注意:这个目前只支持SQL Server和SQL CE,虽然有a pull request to add MySQL support

【讨论】:

  • 可能值得注意的是,EFE 仅真正支持 SQL Server。
  • @Aron - 和 SQL Server Compact :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多