我尝试使用EntityFramework.BulkInsert
来提高插入操作的性能。
目前我有这样的事情:
var theEntities = ChangeTracker.Entries<BaseEntity>().ToList();
this.BulkInsert(theEntities, _transaction.UnderlyingTransaction);
引发异常:
没有提供表格映射
我不知道EF6的例子或者我能做些什么,数据库优先很难找到。
有什么想法吗?
从注释中更改代码,它现在抛出以下异常:
键入&#39; Private_DatabaseEntities.BaseEntity&#39;在上下文中找不到&#39; Private_DatabaseEntities.EntityModelContext&#39;
而EntityModelContext
是我使用的上下文(继承自DbContext
)而BaseEntity
是所有具体实体的基类。
答案 0 :(得分:0)
您尝试插入未映射的DbEntityEntry而不是当前实体。
试试这个
var theEntities = ctx.ChangeTracker.Entries<BaseEntity>().Select(x => x.Entity).ToList();
this.BulkInsert(theEntities, _transaction.UnderlyingTransaction);
EntityFramework.BulkInsert库仅适用于简单实体。它不适用于TPC和TPT等继承,也不会返回标识值。
要解决第二个问题,您必须使用其他库。
实体框架扩展程序
允许将BulkSaveChanges,BulkInsert,BulkUpdate,BulkDelete和BulkMerge实体添加到您的数据库中。支持各种关联和继承(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);
免责声明:我是该项目的所有者Entity Framework Extensions