【问题标题】:EF Core UPDATE ...FROM SELECT WHEREEF Core 更新 ...从选择 WHERE
【发布时间】:2020-06-18 17:37:23
【问题描述】:

如何使用 EF Core SqlServer 生成此查询?

UPDATE Table1
SET Field1 = sil.Field1,
    Field2 = sil.Field2
FROM Table2 sil WITH (NOLOCK)
WHERE sil.Field3= ''
    AND sil.Id1 = Table1.Id1
    AND sil.Id2 = Table1.Id2
    AND sil.Id3 != Table1.Id3

重要!

我想用 single 查询生成它(不是每行查询)

【问题讨论】:

标签: .net sql-server entity-framework ef-core-3.0 ef-core-3.1


【解决方案1】:

AFAIK 没有直接等同于 EF 中的 UPDATE ... FROM 语句。相反,您将查询您的数据集,更新实体模型,然后将更新推送回来。

//  2 database select statements
var table1 = database.Table1.ToList();
var table2 = database.Table2.ToList();

//  in-memory processing.  no database involvement.
foreach(Entity1 t1record in table1) {
    var t2record = table2.Where(sil => ...).FirstOrDefault();
    if(null == t2record) { continue; }
    t1record.Field1 = t2record.Field1; // etc...
}
// push changes back to the database.  EFCore should do this as a single SQL statement
database.SaveChanges();

【讨论】:

  • 它不好。我的问题是 table1 中有 10k 条记录,table2 中有大约 100k 条记录。我有一些性能问题。谢谢!
  • Mby 有的库可以翻译吗?
  • 那就不要使用EF了。使用 ADO.NET/System.Data.SqlClient。
猜你喜欢
  • 2020-08-29
  • 2021-09-05
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多