簡體   English   中英

如何使用Entity Framework提高數據庫插入性能

[英]How to increase database insert performance with Entity Framework

我的第一個項目是實體框架和SQL Server Compact。

該數據庫大約有15個表,所有表都具有指向其他表的外鍵。 我必須讀取數千個XML文件並將其數據導入數據庫。 數據庫結構反映了XML文件結構。 表的層次結構最多包含5個級別。 因此,對於“頂部”表中的每條記錄,我必須在基礎表中插入一個或多個。

我正在使用Entity Framework進行插入,並且可以正常工作,但是性能非常差::。我認為主要問題是,對於大多數記錄,必須回讀ID才能將其用於基礎表中的記錄。

另一件事是-如果我知道的話-實體框架使用單獨的命令插入每個記錄。

有沒有辦法顯着提高性能?

謝謝

使用SQL Compact批量插入庫庫可批量插入數據。

如果您需要更新任何記錄,請使用以下技術:

  1. 在數據庫中創建登台表
  2. 使用庫將其批量插入到臨時表中
  3. 然后執行存儲過程,通過從臨時表中讀取並更新目標表的記錄來進行更新。

首先,請確保使用AddRange或替代解決方案,以確保不會由於DetectChanges方法而導致性能下降。

請參閱: http//entityframework.net/improve-ef-add-performance

免責聲明 :我是Entity Framework Extensions的所有者

該庫支持所有主要提供程序,包括SQL Server Compact

默認情況下,BulkInsert自動獲取插入的行的ID。

該庫使您可以執行方案所需的所有批量操作:

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

// 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