web-dev-qa-db-fra.com

Comment mettre à jour en masse des enregistrements dans Entity Framework?

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?

10
Ujjwal27

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;
    }
}
13
Grégory Bourgin

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);
12
S.Akbari

La mise à jour en bloc peut être effectuée en trois étapes avec un simple EF au lieu de méthodes d'extension distinctes: -

  • Chargez toutes les entités en premier. 
  • Recherchez chaque entité et modifiez ses valeurs de champ. 
  • Après l'enregistrement de Foreach, le contexte change une fois.

Cela enverra plusieurs requêtes de mise à jour en un seul lot. 

2
Jaswinder