使用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合法嗎? 是的,了解原因