1

我计划使用EntityFramework-Plus进行批量操作,但我不确定它是否支持批量插入。

因此,例如,我有Parent 个实体,我想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);
               }
         }
   }
}
4

1 回答 1

1

免责声明:我是Entity Framework Plus项目的所有者

该库不支持BulkInsert.

免责声明:我是实体框架扩展项目的所有者

这个库支持 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();

编辑:回答评论

孩子确实有 ParentID

根据关系的设置方式,您还可以执行直接 BulkInsert。

_dbContext.BulkInsert(result.SelectMany(x => x.Children));
于 2017-09-18T18:44:10.117 回答