inserto a granel utilizando EntityFramework-Plus


Pregunta

Estaba planeando usar EntityFramework-Plus para operaciones en masa, sin embargo, no estoy seguro de que sea compatible con la inserción a granel.

Entonces, por ejemplo, tengo entidades de Paren t y quiero insertar entidades de Child en forma masiva, ¿cómo puntualizo eso utilizando EF Plus?

En el código siguiente, el número de padres podría estar entre el rango de 1000-2000 y el número de niños de 10-20. Quiero agregar los mismos hijos para cada padre, si la condición satisface

public async Task AddChildern(IEnumerable<Child> children)
{
    var ids =  GetIDs();
    var result = _dbContext.Parent.Where(x=> ids.contains(x.ID)).ToListAsync();
   foreach(var p in result)
   {
         foreach(var child in children)
         {
               var flag = CanAddChild(child);
               if(flag)
               {
                    p.Children.Add(child);
               }
         }
   }
}

Respuesta experta

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

Esta biblioteca no es compatible con BulkInsert .

Descargo de responsabilidad : soy el propietario del proyecto Entity Framework Extensions

Esta biblioteca admite BulkInsert pero no es gratuita.

(EF Plus funciona con esta biblioteca)

En su escenario, ya que parece que la entidad secundaria no tiene una relación directa con la principal (No hay propiedad de navegación o ID principal), debe usar el método BulkSaveChanges .

public async Task AddChildern(IEnumerable<Child> children)
{
    var ids =  GetIDs();
    var result = _dbContext.Parent.Where(x=> ids.contains(x.ID)).ToListAsync();
    foreach(var p in result)
    {
         foreach(var child in children)
         {
               var flag = CanAddChild(child);
               if(flag)
               {
                    p.Children.Add(child);
               }
         }
    }
}

// ...code... 

_dbContext.BulkSaveChanges();

EDITAR: Responder comentario

El niño tiene ParentID

Dependiendo de cómo se establezca la relación, también podría hacer un BulkInsert directo.

public async Task AddChildern(IEnumerable<Child> children)
{
    var ids =  GetIDs();
    var result = _dbContext.Parent.Where(x=> ids.contains(x.ID)).ToListAsync();
    foreach(var p in result)
    {
         foreach(var child in children)
         {
               var flag = CanAddChild(child);
               if(flag)
               {
                    p.Children.Add(child);
               }
         }
    }
}

// ...code... 

_dbContext.BulkSaveChanges();




Licencia bajo: CC-BY-SA
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué