使用EF Core:有没有办法告诉它我更新的单个字段中的新值对于所有实体都是相同的,并使用一个/几个SQL语句更新实体?
我想同时在很多记录上设置时间戳。 我目前有这个代码:
var downloadTimeStamp = DateTime.UtcNow;
foreach (var e in entities)
{
e.DownloadDateTime = downloadTimeStamp;
}
await db.SaveChangesAsync();
它生成SQL,为每个实体执行一个UPDATE语句。 E.g:
UPDATE [TableName] SET [DownloadDateTime] = @p1988
WHERE [Id] = @p1989;
SELECT @@ROWCOUNT;
这真的是最佳方式吗?是否可以使EF Core在更少的SQL语句中执行此操作?
在我当前的数据集中,有100,000条记录需要更新。它不是表的全部内容,只是一个子集。使用本地PC上的SQL Server Express在Visual Studio中运行代码时,需要大约90秒才能完成上述更新。在具有小型SQL Server Azure实例的小型Azure Web应用程序中运行时,需要几分钟时间。这就是为什么我希望尽可能优化它。