Saltar al contenido

Actualización masiva en Entity Framework Core

Después de de nuestra extensa compilación de información dimos con la respuesta esta obstáculo que presentan algunos de nuestros lectores. Te dejamos la respuesta y esperamos servirte de gran ayuda.

Solución:

Descargo de responsabilidad: Soy el dueño 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

¿Admite contiene como en tu ejemplo? Creo que esto proviene de EF Core, que no es una función compatible con la versión 3.1 incluso

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

Si TimeEntry tiene una asociación para 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 =  Where Id in (comma separated ids)";    
 context.Database.ExecuteSqlCommandAsync(query);

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

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

Recuerda que puedes mostrar este enunciado si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *