我计划使用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);
}
}
}
}
答案 0 :(得分:0)
免责声明:我是该项目的所有者Entity Framework Plus
此库不支持BulkInsert
。
免责声明:我是该项目的所有者Entity Framework Extensions
这个库支持BulkInsert,但它不是免费的。
(EF Plus由此库提供支持)
在您的方案中,由于它看起来子实体与父项没有直接关系(无导航属性或父ID),您应该使用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();
编辑:回复评论
Child确实有ParentID
根据关系的设置方式,您也可以直接进行BulkInsert。
_dbContext.BulkInsert(result.SelectMany(x => x.Children));