inserimento di massa con EntityFramework-Plus


Domanda

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

Risposta esperta

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.

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




Autorizzato sotto: CC-BY-SA
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché