wake-up-neo.com

Massenaktualisierung von Datensätzen in Entity Framework

Ich versuche, Datensätze massenweise mit Entity Framework zu aktualisieren. Ich habe die Entity Framework.Extensions Update-Methode ausprobiert.

Die Update-Methode kann eine Massenaktualisierung für einen Datensatzsatz mit denselben Aktualisierungswerten durchführen.

Beispiel:

           Id -  Quantity
Record 1 - A  -  10
Record 2 - B  -  20
Record 3 - C  -  30

Wir können alle oben genannten Datensätze massenweise durch einfaches Aufrufen aktualisieren 

Records.Update(new => Record { Quantity = 100 });

Wie kann ich jeden Datensatz mit unterschiedlicher Menge per Entityframework.Extensions oder in einem anderen Ansatz aktualisieren, wodurch die Massenaktualisierung schneller abgeschlossen wird?

10
Ujjwal27

Wenn Sie keine SQL-Anweisung verwenden möchten, können Sie die Methode Attach verwenden, um eine Entität zu aktualisieren, ohne sie vorher laden zu müssen:

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

Verwenden Sie ExecuteSqlCommand :

using (yourDbEntities db = new yourDbEntities())
{
    db.Database.ExecuteSqlCommand("UPDATE YourTABLE SET Quantity = {0} WHERE Id = {1}", quantity, id);
}

Oder ExecuteStoreCommand :

yourDbContext.ExecuteStoreCommand("UPDATE YourTABLE SET Quantity = {0} WHERE Id = {1}", quantity, id);
12
S.Akbari

Die Massenaktualisierung kann in drei Schritten mit einfachen EF anstelle von separaten Erweiterungsmethoden durchgeführt werden: -

  • Laden Sie zuerst alle Entitäten. 
  • Informieren Sie sich zu jeder Entität und ändern Sie ihre Feldwerte. 
  • Nach dem Speichern von Foreach ändert sich der Kontext einmal.

Dadurch werden mehrere Aktualisierungsabfragen in einem Stapel gesendet. 

2
Jaswinder

Verwenden Sie diese Methode, wenn Sie nur einige Eigenschaften ändern möchten:

   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();
0
Bence Végert