使用EntityFramework-Plus批量插入

时间:2017-09-18 15:03:48

标签: entity-framework entity-framework-plus entity-framework-extensions

我计划使用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);
               }
         }
   }
}

1 个答案:

答案 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));