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

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

Так, например, у меня есть Paren т лица, и я хочу вставить 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);
               }
         }
   }
}

1 ответ

Отказ от ответственности: я владелец проекта http://entityframework-plus.net/

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

Отказ от ответственности: я владелец проекта http://entityframework-extensions.net/

Эта библиотека поддерживает 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();

РЕДАКТИРОВАТЬ: Ответить на комментарий

Ребенок имеет ParentID

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

_dbContext.BulkInsert(result.SelectMany(x => x.Children));
Другие вопросы по тегам