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);
}
}
}
}
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.
_dbContext.BulkInsert(result.SelectMany(x => x.Children));