【问题标题】:Bulk insert records and get their Id's after bulk insert in Entity Framework在实体框架中批量插入后批量插入记录并获取它们的 ID
【发布时间】:2017-11-01 18:49:30
【问题描述】:

我想在一个表中批量插入 100,000 多行(该表有一个标识列,每次插入新行时都会自动递增)。

  1. 插入对性能影响最小的行的最快方法是什么?

  2. 插入所有行后,如何获取最近插入的行的id列表?

注意:我做了以下但我没有得到 id 列表

ctx.Documents.AddRange(documentsList);
ctx.SaveChanges();

var ids = documentsList.Select(d => d.Id);

谢谢

【问题讨论】:

    标签: c# sql entity-framework entity-framework-6


    【解决方案1】:

    实体框架中没有Bulk Insert。您必须使用第三方库来执行此类操作。

    默认情况下,Entity Framework 将为每个要保存的实体进行数据库往返。因此,在您的场景中将需要超过 100,000 次数据库往返,这INSANELY很慢。


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

    此库不是免费的,但允许您执行所有批量操作,包括 BulkInsert 并自动返回 Id's。您还可以使用IncludeGraph 选项插入相关实体:

    • 批量保存更改
    • 批量插入
    • 批量删除
    • 批量更新
    • 批量合并

    例子

    // 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;
    });
    

    编辑:回答问题

    那些和“EF Plus”是一样的吗

    我也是Entity Framework Plus的所有者

    简而言之,我们将免费和付费功能分为两个库。 EF+ 不支持Bulk Operations

    这两个库目前共享的唯一功能是 Batch DeleteBatch Update

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    相关资源
    最近更新 更多