Linq to SQL在一个查询中更新多个记录

时间:2015-08-07 15:36:43

标签: sql linq linq-to-sql

鉴于代码:

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

如果我运行SQL Server Profiler,它会显示许多UPDATE....个SQL语句。如果使用一个UPDATE语句执行此查询,我相信这会快得多:

UPDATE TranslationProjectKeys SET Live = 0 WHERE ProjectID = x

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

我担心使用db.ExecuteCommand("..."),因为我知道可以缓存上下文,这可能会导致一些错误。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

php artisan optimize

或者如果你想获得幻想,你可以尝试实现自己的批量更新功能,如this文章节目,但它更深入和复杂(尽管可以这样做)