объемная вставка с использованием EntityFramework-Plus

entity-framework entity-framework-extensions entity-framework-plus

Вопрос

Я планировал использовать EntityFramework-Plus для массовых операций, но я не уверен, поддерживает ли он объемную вставку.

Так, например, у меня есть объекты Paren t, и я хочу вставлять Child сущности в массив, как я могу это сделать, используя EF Plus

В коде ниже число родителей может составлять от 1000 до 2000, а число детей - 10-20. Я хочу добавить те же самые дети для каждого родителя, если условие удовлетворяет

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

Ответ эксперта

Отказ от ответственности : Я являюсь владельцем проекта Entity Framework Plus

Эта библиотека не поддерживает BulkInsert .

Отказ от ответственности : Я являюсь владельцем проекта Entity Framework Extensions

Эта библиотека поддерживает BulkInsert, но она не бесплатна.

(EF Plus работает от этой библиотеки)

В вашем сценарии, поскольку он выглядит дочерним объектом, не имеет прямого отношения к родительскому (без свойства навигации или родительского идентификатора), вы должны использовать метод 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: ответьте Комментарий

У ребенка есть ParentID

В зависимости от того, как устанавливается отношение, вы также можете сделать прямой BulkInsert.

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



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему