2015-12-05 14 views
5

mio codice di prova:EF - Aggiornare più righe nella banca dati senza utilizzare foreach ciclo

using (var db = new MyDbContext()) 
{ 
    string fromUser = ""; //sender 
    string toUser = ""; //receiver 

    var messages = db.Message.Where(x => x.FromUser == fromUser && x.ToUser == toUser) 
       .ToList(); 

    foreach (var message in messages) 
    { 
    message.IsRead = true; 
    db.SaveChanges(); 
    } 
} 

La mia domanda: c'è un altro modo per aggiornare il database senza utilizzare foreach ciclo in quel caso?

p/s: ero stato riferimento a queste domande, ma tutti loro non ha risolto il mio problema:

+0

Spostare i 'SaveChanges()' al di fuori del ciclo 'for' –

risposta

16

Tu non nee d per SaveChanges() su ogni iterazione. Ciò colpirà il database più volte. Prova:

using (var db = new MyDbContext()) 
{ 
    string fromUser = ""; //sender 
    string toUser = ""; //receiver 
    var messages = db.Message.Where(x => x.FromUser == fromUser && x.ToUser == toUser) 
       .ToList(); 
    messages.ForEach(m => m.IsRead = true); 
    db.SaveChanges(); 
} 
+0

Grazie! Questo è l'aiuto :) –

+0

Creazione di una lista e lambda solo per chiamare un metodo che internamente è un ciclo. Pazzi. –

+0

Bene, il punto più grande è sicuramente la chiamata al singolo database. Qualcuno potrebbe obiettare che la lambda sembra più pulita (è un refactoring consigliato da un resharper). Pazzo è un po 'duro IMO. –

Problemi correlati