2017-09-07 1 views
0

Ich muss mehrere Elemente in der Datenbank aktualisieren.ef Core mehrere Elemente aktualisieren und dann speichern

Meine Fragen:

  • muss ich ctx.Items.Update (Artikel) verwenden; ?
  • kann ich zuerst alle Elemente in Schleife aktualisieren und dann ctx.SaveChangesAsync() verwenden?

Grundsätzlich muss ich dies beschleunigen, so nehme ich an, wenn ich die Artikel, Eigenschaften aktualisieren und dann rufen SaveChangesAsync() für alle von ihnen es einen Aufruf an die Datenbank machen wird vielmehr, dass es innerhalb der Schleife für jedes Element zu tun ?

Was ist mit der ctx.Items.Update (Element)? macht es irgendeinen Sinn es zu haben? Ich denke, ich brauche das sonst, wie wird es wissen, was zu aktualisieren ist, oder?

using (var ctx = new MyCOntext()) 
{ 
    var allToBeUpdated = await ctx.Items.Where(t=>t.ToBeUpdated == true).ToListAsync(); 

     foreach (var item in allToBeUpdated) 
     { 
      item.ToBeUpdated = false; 

      ctx.Items.Update(item); // do I need this ? 
     } 

     await ctx.SaveChangesAsync(); // can I have the save changes async out of foreach? So I can update all the items at once rather than one by one 
} 

Antwort

2

Die unten sollten die Werte speichern

using (var ctx = new MyCOntext()) 
{ 
    var allToBeUpdated = await ctx.Items.Where(t=>t.ToBeUpdated == true).ToListAsync(); 

     foreach (var item in allToBeUpdated) 
     { 
      item.ToBeUpdated = false; //change tracking will take care of tracking what is changed 
     } 

     await ctx.SaveChangesAsync(); // Save changes outside will update all the pending changes 
} 
ausreichend sein,