J'essaie de mettre à jour en bloc des enregistrements à l'aide d'Entity Framework. J'ai essayé la méthode Entity Framework.Extensions Update
.
La méthode Update
permet de mettre à jour en bloc un ensemble d'enregistrements avec le même ensemble de valeurs de mise à jour.
Exemple:
Id - Quantity
Record 1 - A - 10
Record 2 - B - 20
Record 3 - C - 30
Nous pouvons mettre à jour en masse tous les enregistrements ci-dessus par un simple appel
Records.Update(new => Record { Quantity = 100 });
Comment puis-je mettre à jour en masse chaque enregistrement avec une quantité différente en utilisant Entityframework.Extensions
ou toute autre approche permettant de terminer la mise à jour en bloc plus rapidement?
Si vous ne souhaitez pas utiliser une instruction SQL, vous pouvez utiliser la méthode Attach pour mettre à jour une entité sans avoir à la charger au préalable:
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;
}
}
Utilisez ExecuteSqlCommand
:
using (yourDbEntities db = new yourDbEntities())
{
db.Database.ExecuteSqlCommand("UPDATE YourTABLE SET Quantity = {0} WHERE Id = {1}", quantity, id);
}
Ou ExecuteStoreCommand
:
yourDbContext.ExecuteStoreCommand("UPDATE YourTABLE SET Quantity = {0} WHERE Id = {1}", quantity, id);
La mise à jour en bloc peut être effectuée en trois étapes avec un simple EF au lieu de méthodes d'extension distinctes: -
Cela enverra plusieurs requêtes de mise à jour en un seul lot.