C# 如何使用实体框架提高数据库插入性能
我有我的第一个实体框架和SQL Server Compact项目 该数据库大约有15个表,这些表都有指向其他表的外键。 我必须读取数千个XML文件并将其数据导入数据库。数据库结构反映了XML文件结构。有一个多达5个级别的表层次结构。因此,对于“top”表中的每条记录,我必须在底层表中插入一条或多条记录 我使用实体框架进行插入,效果很好,但性能非常差:(。 我认为主要的问题是,对于大多数记录,必须读回ID才能用于底层表中的记录 另一件事是——如果我知道的没错的话——实体框架用一个单独的命令插入每个记录 有没有办法显著提高性能 谢谢使用库以批量方式插入数据 如果需要更新任何记录,请使用以下技术:C# 如何使用实体框架提高数据库插入性能,c#,entity-framework,insert,sql-server-ce,database-performance,C#,Entity Framework,Insert,Sql Server Ce,Database Performance,我有我的第一个实体框架和SQL Server Compact项目 该数据库大约有15个表,这些表都有指向其他表的外键。 我必须读取数千个XML文件并将其数据导入数据库。数据库结构反映了XML文件结构。有一个多达5个级别的表层次结构。因此,对于“top”表中的每条记录,我必须在底层表中插入一条或多条记录 我使用实体框架进行插入,效果很好,但性能非常差:(。 我认为主要的问题是,对于大多数记录,必须读回ID才能用于底层表中的记录 另一件事是——如果我知道的没错的话——实体框架用一个单独的命令插入每个
首先,确保使用AddRange或其他解决方案,以确保不会由于DetectChanges方法而导致性能低下的结果 见: 免责声明:我是 此库支持所有主要提供商,包括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;
});
如果性能是个问题,最简单的解决方法是手动SQL查询。这是一次性的(初始化)操作?然后您可以禁用sql server中的所有约束。这将提高性能。但请确保仅插入有效数据。插入后,请重新启用约束。感谢您的提示。我不知道的是-如何获取插入行的ID?我需要它们作为其他表中插入的引用。您可以预先访问e键的值,并设置一个选项,在Ank you上使用INDENTITY_INSERT获得该答案。它可以解决实体框架的问题,但在我的例子中,CodingYoshi的解决方案更容易实现。