如何使用 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库批量插入数据。
如果您需要更新任何记录,请使用此技术:
- 在您的数据库中创建暂存 table
- 使用库批量插入暂存区table
- 然后执行存储过程,通过从暂存 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;
});
我的第一个项目是 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库批量插入数据。
如果您需要更新任何记录,请使用此技术:
- 在您的数据库中创建暂存 table
- 使用库批量插入暂存区table
- 然后执行存储过程,通过从暂存 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;
});