鉴于代码:
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("...")
,因为我知道可以缓存上下文,这可能会导致一些错误。
答案 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文章节目,但它更深入和复杂(尽管可以这样做)