如何使用 Entity Framework 提高数据库插入性能

How to increase database insert performance with Entity Framework

我的第一个项目是 Entity Framework 和 SQL Server Compact。

数据库大约有 15 个 table,它们都有指向其他 table 的外键。 我必须阅读数千个 XML 文件并将它们的数据导入数据库。数据库结构反映了 XML 文件结构。有一个最多 5 级的 table 层次结构。因此,对于 "top" table 中的每条记录,我必须在基础 table 中插入一条或多条记录。

我正在使用 Entity Framework 进行插入,它工作正常,但性能非常非常差:(。 我认为主要问题是,对于大多数记录,必须回读 ID 才能用于基础 tables 中的记录。

另一件事是 - 如果我没记错的话 - Entity Framework 使用单独的命令插入每条记录。

有没有办法显着提高性能?

谢谢

使用SQL Compact Bulk Insert Library库批量插入数据。

如果您需要更新任何记录,请使用此技术:

  1. 在您的数据库中创建暂存 table
  2. 使用库批量插入暂存区table
  3. 然后执行存储过程,通过从暂存 table 读取并更新目标 table 的记录来进行更新。

首先,确保使用 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;
});