首页 文章

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

提问于
浏览
0

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

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

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

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

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

谢谢

2 回答

  • 0

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

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

    • 在数据库中创建临时表

    • 使用库批量插入登台表

    • 然后执行存储过程以通过读取登台表并更新目标表的记录来执行更新 .

  • 0

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

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

    Disclaimer :我是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;
    });
    

相关问题