【问题标题】:Is There A More Efficient Way To Code This Entity Framework Core UpdateRange Code?是否有更有效的方法来编写此实体框架核心 UpdateRange 代码?
【发布时间】:2021-10-25 16:23:57
【问题描述】:
var results = context.Customer.Where(c => c.CustomerId == customerId).AsQueryable();

foreach(Customer cust in results)
{
    cust.isDeleted = true;
}

context.UpdateRange(results);
context.SaveChanges();

** 使用循环似乎效率低下。获取和更新可以在一个语句中完成吗?

【问题讨论】:

标签: c# .net entity-framework-core bulkupdate


【解决方案1】:

如果您想要更好的性能,请改为执行 SQL:

context.Database.ExecuteSqlCommandAsync($"UPDATE Customer SET isDeleted = 1 WHERE CustomerId = {customerId}");

EF Core 将防止注入并为您生成 SQL 参数。

编辑: 正如 Peter 在 cmets 中指出的那样,请记住,这将导致任何已加载的实体与数据库不同步。

【讨论】:

  • 可能应该添加一个注释,如果这些记录中的任何一个已经加载到 DbContext 中,那么在此之后它们的isDeleted 属性中将具有一个过时的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 2021-02-14
  • 1970-01-01
  • 2021-05-25
  • 2019-07-22
  • 1970-01-01
相关资源
最近更新 更多