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

问题描述 投票:0回答:2

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

该数据库有大约15个表,它们都有其他表的外键。我必须读取数千个XML文件并将其数据导入数据库。数据库结构镜像XML文件结构。最多有5个级别的表层次结构。因此,对于“顶部”表中的每条记录,我必须在基础表中插入一个或多个。

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

另一件事是 - 如果我知道的话 - 实体框架使用单独的命令插入每个记录。

有没有办法大幅提高性能?

谢谢

c# entity-framework insert sql-server-ce database-performance
2个回答
0
投票

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

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

  1. 在数据库中创建临时表
  2. 使用库批量插入登台表
  3. 然后执行存储过程以通过从登台表读取并更新目标表的记录来执行更新。

0
投票

首先,请确保使用AddRange或替代解决方案,以确保由于DetectChanges方法而导致性能结果不佳。

见:http://entityframework.net/improve-ef-add-performance

免责声明:我是Entity Framework Extensions的所有者

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

默认情况下,BulkInsert会自动获取插入行的ID。

该库允许您执行场景所需的所有批量操作:

  • 批量SaveChanges
  • 批量插入
  • 批量删除
  • 批量更新
  • 批量合并

// 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;
});
© www.soinside.com 2019 - 2024. All rights reserved.