【问题标题】:Linq to SQL update multiple records in one queryLinq to SQL 在一次查询中更新多条记录
【发布时间】:2015-08-07 15:36:42
【问题描述】:

给定代码:

var q = db.TranslationProjectKeys.Where(c => c.ProjectID == forProject.ID);
foreach (var key in q)
{
    key.Live = false;
}
db.SubmitChanges();

如果我运行 SQL 服务器分析器,它会显示数十个 UPDATE.... SQL 语句。我相信如果使用一条UPDATE 语句执行此查询,这将大大加快:

UPDATE TranslationProjectKeys SET Live = 0 WHERE ProjectID = x

有没有办法让查询以这种方式执行?

我对使用db.ExecuteCommand("...") 持谨慎态度,因为我知道可以缓存上下文,这可能会导致一些错误。

【问题讨论】:

    标签: sql linq linq-to-sql


    【解决方案1】:

    您可以使用EntityFramework.Extended 。您可以执行多个更新。 例如

    var q = db.TranslationProjectKeys.Where(c => c.ProjectID == forProject.ID).Update(c => new TranslationProjectKey{ Live  = false })
    

    【讨论】:

      【解决方案2】:

      linq to sql 没有内置的批量更新功能(除非发生了变化)。你可以像手动执行命令

      dataContext.ExecuteCommand("UPDATE TranslationProjectKeys SET Live = 0 WHERE ProjectID = {0}", x);
      

      或者,如果您想变得花哨,您可以尝试实现自己的批量更新功能,例如 this 文章显示,但它更深入和复杂(尽管可以这样做)

      【讨论】:

      • 感谢您的回答,由于数据上下文的缓存状态,我对使用ExecuteCommand 有点谨慎
      • @TomGullen 尝试查看我链接的文章。看起来批量更新有点让人头疼,但它可能非常甜蜜,值得花时间去实现它。除此之外,我不确定还有其他选择,不幸的是
      • @TomGullen 你对缓存状态到底是什么意思?
      猜你喜欢
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多