将 Linq 翻译成 SQL 更新 ... 从 Other_table WHERE
Translating Linq to SQL Update ... FROM Other_table WHERE
EF Core 翻译有我预期的结果
UPDATE Table1
SET field1 = t2.field1,
field2 = t2.field2
FROM Table2 as t2
WHERE t1.Id1 != t2.Id2 AND
t1.Id2 = t2.Id2 AND
t2.SomeField > 0
但在 SQL 探查器中,我可以看到 1 个查询 每个 我正在尝试更新的记录。
这是我的代码。
var uploads = uow.Repository<Table2>().List(spec);
var errors = uow.Repository<Table1>().Get();
foreach (var upload in uploads)
{
var toUpdate = errors.Where(x =>
x.Id1 != upload.Id2 &&
x.Id2 == upload.Id2);
foreach (var error in toUpdate)
{
error.IsResolved = true;
}
}
uow.SaveChanges();
你想要的被称为 "bulk update",这不是 Entity Framework 的默认行为,但有几个 NuGet 包可以正确处理它。
例如,您可以查看 EFCore.BulkExtensions。
EF Core 翻译有我预期的结果
UPDATE Table1
SET field1 = t2.field1,
field2 = t2.field2
FROM Table2 as t2
WHERE t1.Id1 != t2.Id2 AND
t1.Id2 = t2.Id2 AND
t2.SomeField > 0
但在 SQL 探查器中,我可以看到 1 个查询 每个 我正在尝试更新的记录。
这是我的代码。
var uploads = uow.Repository<Table2>().List(spec);
var errors = uow.Repository<Table1>().Get();
foreach (var upload in uploads)
{
var toUpdate = errors.Where(x =>
x.Id1 != upload.Id2 &&
x.Id2 == upload.Id2);
foreach (var error in toUpdate)
{
error.IsResolved = true;
}
}
uow.SaveChanges();
你想要的被称为 "bulk update",这不是 Entity Framework 的默认行为,但有几个 NuGet 包可以正确处理它。
例如,您可以查看 EFCore.BulkExtensions。