Stack Overflow Asked by Artportraitdesign1 on August 29, 2020
Is there way with EF Core Bulk extensions to only update first few 10000 rows? write message, update next batch, write message in loop until complete?
I know there is Batch Size, however if there is only 5 million to update, and I want only update a certain amount, write a message, in continual loop until complete, how can this be done?
Should I use Top or Take?
I want to write "Hello", every few batches.
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
Using EF Core 3.1.
Company does not want to use SignalR
It looks like BatchSize is only used for bulk insert. For update the expression is translated to a single SQL UPDATE statement, which doesn't operate by "batches".
Correct answer by David Browne - Microsoft on August 29, 2020
Try this.
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();
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();
Answered by Asherguru on August 29, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP