Ujj*_*l27 16 c# linq entity-framework entity-framework-extended bulkupdate
我正在尝试使用Entity Framework批量更新记录.我试过Entity Framework.Extensions Update方法.
该Update方法能够使用相同的更新值集批量更新一组记录.
例:
Id - Quantity
Record 1 - A - 10
Record 2 - B - 20
Record 3 - C - 30
Run Code Online (Sandbox Code Playgroud)
我们可以通过简单的调用批量更新所有上述记录
Records.Update(new => Record { Quantity = 100 });
Run Code Online (Sandbox Code Playgroud)
如何使用Entityframework.Extensions或以任何其他方法批量更新具有不同数量的每条记录,从而更快地完成批量更新?
Gré*_*gin 19
如果您不想使用SQL语句,可以使用Attach方法更新实体而不必先加载它:
using (myDbEntities db = new myDbEntities())
{
try
{
//disable detection of changes to improve performance
db.Configuration.AutoDetectChangesEnabled = false;
//for all the entities to update...
MyObjectEntity entityToUpdate = new MyObjectEntity() {Id=123, Quantity=100};
db.MyObjectEntity.Attach(entityToUpdate);
//then perform the update
db.SaveChanges();
}
finally
{
//re-enable detection of changes
db.Configuration.AutoDetectChangesEnabled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
Sal*_*ari 17
using (yourDbEntities db = new yourDbEntities())
{
db.Database.ExecuteSqlCommand("UPDATE YourTABLE SET Quantity = {0} WHERE Id = {1}", quantity, id);
}
Run Code Online (Sandbox Code Playgroud)
yourDbContext.ExecuteStoreCommand("UPDATE YourTABLE SET Quantity = {0} WHERE Id = {1}", quantity, id);
Run Code Online (Sandbox Code Playgroud)
EFCore 中有 EFCore 7.0 提供的内置函数ExecuteUpdate和方法ExecuteDelete
context.Customers.Where(...).ExecuteDeleteAsync();
context.Customers.Where(...).ExecuteUpdateAsync(c => new Customer { Age = c.Age + 1 });
context.Customers.Where(...).ExecuteUpdateAsync(c => new { Age = c.Age + 1 });
Run Code Online (Sandbox Code Playgroud)
如果您只想修改一些属性,请使用这种方法:
foreach (var vSelectedDok in doks)
{
//disable detection of changes to improve performance
vDal.Configuration.AutoDetectChangesEnabled = false;
vDal.Dokumente.Attach(vSelectedDok);
vDal.Entry(vSelectedDok).Property(x=>x.Status).IsModified=true;
vDal.Entry(vSelectedDok).Property(x => x.LastDateChanged).IsModified = true;
}
vDal.SaveChanges();
Run Code Online (Sandbox Code Playgroud)