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

时间:2016-02-01 15:24:54

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

我尝试使用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是所有具体实体的基类。

1 个答案:

答案 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