使用EntityFramework-Plus批量插入


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

因此,例如,我有Paren牛逼的实体,我想插入Child实体散装我怎么点,使用EF加

在下面的代码中,父母的数量可以在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);
               }
         }
   }
}

专家解答

免责声明 :我是项目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。

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();




许可下: CC-BY-SA
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因