Actualización masiva en Entity Framework Core

Actualización masiva en Entity Framework Core

Descargo de responsabilidad :Soy el propietario del proyecto Entity Framework Plus

Nuestra biblioteca tiene una función de actualización por lotes que creo que es lo que está buscando

Esta función es compatible con EF Core

// Is there anything like? YES!!!
context.TimeEntries
    .Where(te => timeEntryIds.Contains(te.Id))
    .Update(te => new TimeEntry() { InvoiceId = invoice.Id });

Wiki:Actualización por lotes de EF

EDITAR: Responder comentario

La compatibilidad con EF Core 3.x contiene:https://dotnetfiddle.net/DAdIO2


Si TimeEntry tiene una asociación con Invoice (verifique las propiedades de navegación), probablemente pueda hacer algo como esto:

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();

¿Está buscando el rendimiento de la sintaxis simplificada?

Sugeriría usar una consulta SQL directa,

 string query = "Update TimeEntries Set InvoiceId = <invoiceId> Where Id in (comma separated ids)";    
 context.Database.ExecuteSqlCommandAsync(query);

Para identificaciones separadas por comas, puede hacer string.Join(',', timeEntryIds)

Depende de lo que realmente necesites. Si desea usar Linq, debe iterar a través de cada objeto.