Estraggo un sacco di voci della scheda attività dal database e le utilizzo per creare una fattura. Dopo aver salvato la fattura e ho un ID, voglio aggiornare le voci della scheda attività con l'ID fattura. Esiste un modo per aggiornare in blocco le entità senza caricarle una alla volta?
void SaveInvoice(Invoice invoice, int[] timeEntryIds) {
context.Invoices.Add(invoice);
context.SaveChanges();
// Is there anything like?
context.TimeEntries
.Where(te => timeEntryIds.Contains(te.Id))
.Update(te => te.InvoiceId = invoice.Id);
}
Se TimeEntry
ha un'associazione con Invoice
(controlla le proprietà di navigazione), probabilmente puoi fare qualcosa del genere:
var timeEntries = context.TimeEntries.Where(t => timeEntryIds.Contains(te.Id)).ToArray();
foreach(var timeEntry in timeEntries)
invoice.TimeEntries.Add(timeEntry);
context.Invoices.Add(invoice);
//save the entire context and takes care of the ids
context.SaveChanges();
Disclaimer : sono il proprietario del progetto Entity Framework Plus
La nostra libreria ha una funzione di aggiornamento batch che credo sia quello che stai cercando
Questa funzione supporta EF Core
// Is there anything like? YES!!!
context.TimeEntries
.Where(te => timeEntryIds.Contains(te.Id))
.Update(te => new TimeEntry() { InvoiceId = invoice.Id });
Wiki: aggiornamento batch EF
EDIT: Rispondi al commento
supporta contiene come nel tuo esempio? Penso che questo provenga da EF Core, che non è supportato nemmeno nella versione 3.1
Il supporto EF Core 3.x contiene: https://dotnetfiddle.net/DAdIO2