【问题标题】:EntityFramework.BulkInsert not working for database-firstEntityFramework.BulkInsert 不适用于数据库优先
【发布时间】:2016-02-01 15:24:54
【问题描述】:

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

目前我有这样的事情:

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

抛出异常:

没有提供表映射

对于 EF6 的示例,我看不出重点或我能做什么,数据库优先真的很难找到。

有什么想法吗?

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您尝试插入未映射的 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

    【讨论】:

    • 真丢脸。谢谢!无论如何,解决这个问题会给我带来另一个例外。请查看我编辑的问题。
    • 只要你的实体名称“BaseEntity”,我就知道你会有第二期;)
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    相关资源
    最近更新 更多