Массовая вставка с использованием 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));