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
是所有具体实体的基类。
您尝试插入未映射的 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);
免责声明:我是项目实体框架扩展的所有者