insertion en vrac avec EntityFramework-Plus


Question

Je prévoyais d'utiliser EntityFramework-Plus pour les opérations en bloc, mais je ne suis pas sûr s'il prend en charge l'insertion en bloc.

Ainsi, par exemple, j’ai des entités Paren et je veux insérer des entités Child en bloc. Comment puis-je me servir de EF Plus?

Dans le code ci-dessous, le nombre de parents peut être compris entre 1 000 et 2 000 et le nombre d'enfants entre 10 et 20. Je veux ajouter les mêmes enfants pour chaque parent, si la condition est satisfaisante

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

Réponse d'expert

Disclaimer : Je suis propriétaire du projet Entity Framework Plus

Cette bibliothèque ne supporte pas BulkInsert .

Avertissement : je suis propriétaire du projet Entity Framework Extensions

Cette bibliothèque prend en charge BulkInsert mais ce n’est pas gratuit.

(EF Plus est alimenté par cette bibliothèque)

Dans votre scénario, étant donné qu'il semble que l'entité enfant n'a pas de relation directe avec le parent (aucune propriété de navigation ou ID parent), vous devez utiliser la méthode 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();

EDIT: Répondre au commentaire

L'enfant a le ParentID

Selon la manière dont la relation est définie, vous pouvez également effectuer un BulkInsert direct.

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




Sous licence: CC-BY-SA
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi