使用 EFCore.BulkExtensions 时是不是需要调用 SaveChanges

Posted

技术标签:

【中文标题】使用 EFCore.BulkExtensions 时是不是需要调用 SaveChanges【英文标题】:Do I need to call SaveChanges when using EFCore.BulkExtensions使用 EFCore.BulkExtensions 时是否需要调用 SaveChanges 【发布时间】:2019-02-10 06:41:43 【问题描述】:

我开始使用 EFCore.BulkExtensions 进行 ef 批量操作,它工作得非常好。

(见https://github.com/borisdj/EFCore.BulkExtensions/)

我是否还需要调用 SaveChanges:

        using (var db = new ReportingContext())
        
            db.BulkInsertOrUpdate(entities);
            db.SaveChanges();
        

或者这样就够了?

        using (var db = new ReportingContext())
        
            db.BulkInsertOrUpdate(entities);
        

【问题讨论】:

【参考方案1】:

链接中的页面包含以下内容

在幕后使用 SqlBulkCopy 进行插入,更新/删除将 BulkInsert 与原始 Sql MERGE (MsSQL 2008+) 结合在一起。

所以答案是否定的,您不需要调用SaveChanges,因为 EFCore.BulkExtensions 直接与数据库 (SqlServer) 一起工作。您传递的实体甚至可能不会附加(跟踪)到上下文。它使用上下文来获取实体模型元数据和连接/事务信息。

【讨论】:

以上是关于使用 EFCore.BulkExtensions 时是不是需要调用 SaveChanges的主要内容,如果未能解决你的问题,请参考以下文章

EFCore.BulkExtensions Demo

具有一对一关系的 EF Core 批量插入

测试使用

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇