簡體   English   中英

使用 EntityFramework Extended 批量插入

[英]Bulk insert using EntityFramework Extended

根據,在實體批量插入可以使用下面的代碼進行:

 var customers = GetCustomers();   
 db.Customers.AddRange(customers);   
 db.SaveChanges();  

我使用 SQL Profiler 來驗證執行了多少插入查詢,我看到列表的每個元素都有一個插入。

在此處輸入圖片說明

為什么?

這就是 EF6 執行“批量”插入的方式,它不是批量插入,而是逐行插入。 結果表現很糟糕。

請改用EF.BulkInsertEFUtilities

更新:

DbSet<T>.AddRange()是內置 API 的一部分,這樣您就不會使用 EF.Extended 或任何其他 3rd 方庫。

添加范圍

添加范圍不執行 BulkInsert,它只是在將所有實體添加到集合后 DetectChanges 一次。

DetectChange 方法可能非常慢。

請參閱: 實體框架 - DetectChanges 性能

正如您所注意到的,它在數據庫中一一保存實體,這非常慢。

EF擴展

不再支持此庫,並且沒有批量插入功能。

批量插入庫

支持批量插入的三個主要庫:

請注意,兩個免費庫都不支持所有繼承和關聯。


免責聲明:我是實體框架擴展項目的所有者

除了批量插入之外,該庫還允許您執行所有批量操作:

  • 批量保存更改
  • 批量插入
  • 批量更新
  • 批量刪除
  • 批量合並
  • 批量同步

例子:

// Easy to use
context.BulkSaveChanges();

// Easy to customize
context.BulkSaveChanges(bulk => bulk.BatchSize = 100);

// Perform Bulk Operations
context.BulkDelete(customers);
context.BulkInsert(customers);
context.BulkUpdate(customers);

// Customize Primary Key
context.BulkMerge(customers, operation => {
   operation.ColumnPrimaryKeyExpression = 
        customer => customer.Code;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM