【问题标题】:Update one column and set all values to 1 using Entity Framework使用实体框架更新一列并将所有值设置为 1
【发布时间】:2021-10-08 15:42:38
【问题描述】:

如何更新 1 列以将所有行的值设置为 1,因此我的表有三列 customerno、name、doneflag,我想将所有行的 Doneflag 设置为 1,目前我的表中有 8 行并且所有的值都为 0 作为 Doneflag,我想使用实体框架进行一次更新以将所有行的 doneflag 设置为 1,这很简单,因为它会使用 Mysql:

update myDB.Customer
 set doneflag = 0;

我试过了,但是不行;

context.Customer.Add(x => x.Doneflag = 1);

【问题讨论】:

标签: linq asp.net-core .net-core entity-framework-core


【解决方案1】:

您需要加载现有记录,修改它们,然后保存更改,例如

var notYetDoneCustomers = await context.Customers.Where(c => c.DoneFlag == 0).ToListAsync();

foreach(var cust in notYetDoneCustomers) {
    cust.DoneFlag = 1;
}

await context.SaveChangesAsync();

【讨论】:

    【解决方案2】:

    标准实体框架流程是

    • 加载数据
    • 修改它
    • 保存更改

    对于批量更新,您有多种选择:

    这里的文档涵盖了这个主题:https://docs.microsoft.com/en-us/ef/core/performance/efficient-updating

    很遗憾,EF 目前不提供用于执行批量更新的 API。在引入这些之前,您可以使用原始 SQL 来执行性能敏感的操作:

    使用像 entityframework plus 这样的库的好处是,您可以留在一个类型安全的世界中,如果您执行原始 SQL,您将失去这种世界。

    【讨论】:

      【解决方案3】:

      另一种选择:

      安装linq2db.EntityFrameworkCore(免责声明:我是创作者之一)

      context.Customers
         .Where(c => c.doneFlag == 0)
         .Set(c => c.doneflag, 1)
         .Update();
      

      【讨论】:

        猜你喜欢
        • 2012-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-06
        • 2011-12-10
        • 1970-01-01
        • 2011-02-24
        相关资源
        最近更新 更多