首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#实体框架:仅更新第一批记录并停止

C#实体框架:仅更新第一批记录并停止
EN

Stack Overflow用户
提问于 2020-08-21 07:16:12
回答 2查看 278关注 0票数 0

有没有办法使用EF核心批量扩展来只更新前几行10000行?写入消息,更新下一批,循环写入消息直到完成?

我知道有批处理的大小,但是如果只有500万要更新,并且我只想更新一定的量,写一条消息,在连续循环中直到完成,怎么做呢?

我应该使用Top还是Take?

我想写"Hello",每隔几个批次。

代码语言:javascript
复制
while {

await _dbContext.Set<Product>()
    .Where(x => x.Manufacturer == "ABC Company" &&
                x.StartYear == 2019 &&
                x.ProductType.ProductTypeDescription == "Electronics")
    .BatchUpdateAsync(x => new Product(){
                Manufacturer = "XYZ Company",
                StartYear = 2020 });

Console.WriteLine("hello"):

https://github.com/borisdj/EFCore.BulkExtensions

使用EF Core 3.1。

公司不想使用SignalR

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-21 07:52:33

看起来BatchSize只用于批量插入。For update表达式被转换为单个SQL UPDATE语句,该语句不按“批处理”操作。

票数 0
EN

Stack Overflow用户

发布于 2020-08-21 08:58:04

尝尝这个。

if循环到前几个10,000

代码语言:javascript
复制
int iEnd = 5;

for (var i = 0; i <= iEnd; i++)
{
    var products = await _dbContext.Set<Product>().Where(x => x.Manufacturer == "ABC Company" &&
                    x.StartYear == 2019 &&
                    x.ProductType.ProductTypeDescription == "Electronics").Skip(i * 10000).Take(10000).ToList();

    products.ForEach(x =>
    {
         x.Manufacturer = "XYZ Company";
         x.StartYear = 2020;
    });
    _dbContext.Set<Product>().UpdateRange(products); // or you can use BulkUpdate here.
}

_dbContext.SaveChanges();

If循环到500万。

代码语言:javascript
复制
int i = 0;
Boolean IsContinue = true;
while (IsContinue)
{
     var products = await _dbContext.Set<Product>().Where(x => x.Manufacturer == "ABC Company" &&
                x.StartYear == 2019 &&
                x.ProductType.ProductTypeDescription == "Electronics").Skip(i * 10000).Take(10000).ToList();

     if (products.Count() == 0)
          IsContinue = false;
     else
     {
          products.ForEach(x =>
          {
                x.Manufacturer = "XYZ Company";
                x.StartYear = 2020;
          });
          _dbContext.Set<Product>().UpdateRange(products); // or you can use BulkUpdate here.
      }
      i++;
}

_dbContext.SaveChanges();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63514362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档