EntityFramework.BulkInsert 不适用于数据库优先

本文关键字:数据库 适用于 BulkInsert 不适用 EntityFramework | 更新日期: 2023-09-27 18:32:54

我正在尝试通过使用EntityFramework.BulkInsert来提高插入操作的性能。

目前我有这样的东西:

var theEntities = ChangeTracker.Entries<BaseEntity>().ToList();
this.BulkInsert(theEntities, _transaction.UnderlyingTransaction);

这将引发异常:

未提供表映射

我不明白这一点,也没有看到EF6的例子,数据库优先真的很难找到。

有什么想法吗?

从注释更改代码,它现在会引发以下异常:

类型"Private_DatabaseEntities.BaseEntity"在上下文"Private_DatabaseEntities.EntityModelContext"中找不到

EntityModelContext是我正在使用的上下文(继承自DbContext),BaseEntity是所有具体实体的基类。

EntityFramework.BulkInsert 不适用于数据库优先

您尝试插入未映射的 DbEntityEntry,而不是当前实体。

试试这个

var theEntities = ctx.ChangeTracker.Entries<BaseEntity>().Select(x => x.Entity).ToList();
this.BulkInsert(theEntities, _transaction.UnderlyingTransaction);

EntityFramework.BulkInsert 库仅适用于简单实体。它不适用于 TPC 和 TPT 等继承,并且不返回标识值。

要解决第二个问题,您将不得不使用另一个库。

实体框架扩展

允许将更改、批量插入、批量

更新、批量删除和批量合并实体批量保存到数据库中。支持各种关联和继承(TPC,TPH和TPT)

// Easy to use
context.BulkSaveChanges();
// Easy to customize
context.BulkSaveChanges(operation => operation.BatchSize = 1000);
// For direct bulk insert
var theEntities = ctx.ChangeTracker.Entries<BaseEntity>().Select(x => x.Entity).ToList();
context.BulkInsert(theEntities);

免责声明:我是项目实体框架扩展的所有者