Linq to SQL 在一次查询中更新多条记录
Linq to SQL update multiple records in one query
给定代码:
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("...")
持谨慎态度,因为我知道可以缓存上下文,这会导致一些错误。
linq to sql 没有内置的批量更新功能(除非发生了某些变化)。你可以像
一样手动执行命令
dataContext.ExecuteCommand("UPDATE TranslationProjectKeys SET Live = 0 WHERE ProjectID = {0}", x);
或者如果你想变得更有趣,你可以尝试实现自己的批量更新功能,如 this 文章所示,但它更加深入和复杂(尽管可以做到)
您可以使用 EntityFramework.Extended 。您可以执行多个更新。
例如
var q = db.TranslationProjectKeys.Where(c => c.ProjectID == forProject.ID).Update(c => new TranslationProjectKey{ Live = false })
给定代码:
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("...")
持谨慎态度,因为我知道可以缓存上下文,这会导致一些错误。
linq to sql 没有内置的批量更新功能(除非发生了某些变化)。你可以像
一样手动执行命令dataContext.ExecuteCommand("UPDATE TranslationProjectKeys SET Live = 0 WHERE ProjectID = {0}", x);
或者如果你想变得更有趣,你可以尝试实现自己的批量更新功能,如 this 文章所示,但它更加深入和复杂(尽管可以做到)
您可以使用 EntityFramework.Extended 。您可以执行多个更新。 例如
var q = db.TranslationProjectKeys.Where(c => c.ProjectID == forProject.ID).Update(c => new TranslationProjectKey{ Live = false })