Stavo pensando di usare EntityFramework-Plus per operazioni di massa, ma non sono sicuro che supporti l'inserimento di massa.
Quindi, per esempio, ho le entità Paren
t e voglio inserire le entità Child
alla rinfusa come faccio a punto utilizzando EF Plus
Nel codice sotto il numero di genitori potrebbe essere tra 1000-2000 range e il numero di bambini è 10-20. Voglio aggiungere gli stessi figli per ciascun genitore, se la condizione soddisfa
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);
}
}
}
}
Disclaimer : sono il proprietario del progetto Entity Framework Plus
Questa libreria non supporta BulkInsert
.
Disclaimer : sono il proprietario del progetto Entity Framework Extensions
Questa libreria supporta BulkInsert ma non è gratuita.
(EF Plus è alimentato da questa libreria)
Nel tuo scenario, dal momento che sembra che l'entità figlio non abbia una relazione diretta con il genitore (Nessuna proprietà di navigazione o ID genitore), devi usare il metodo 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();
MODIFICA: rispondi al commento
Il bambino ha ParentID
A seconda di come è impostata la relazione, puoi anche eseguire un BulkInsert diretto.
_dbContext.BulkInsert(result.SelectMany(x => x.Children));