首页 > 解决方案 > 将 BulkInsert 与 OracleDB 一起使用

问题描述

我的 OracleDB 上的 BulkInsert 存在某种问题。我需要插入几千个对象,所以我决定使用 Nuget 添加的 EF.BulkInsert.Oracle,它是 Oracle 的 EF6.BulkInsert 的扩展。

          private IOracleDbContext _context;//Class property
    //method body:
  EF6.BulkInsert.ProviderFactory.Register<EF6.BulkInsert.Providers.OracleBulkInsertProvider>("BulkInsertProvider");
        using (var context = (OracleDbContext)_context)
        {
            using (var dbContextTransaction = context.Database.BeginTransaction())
            {
                try
                {
                    //Preparing list of objects

                    var opt = new EF6.BulkInsert.BulkInsertOptions();
                    opt.Connection = context.Database.Connection;
                    await context.BulkInsertAsync<ObjectType>(ObjectList,opt);

                    await context.SaveChangesAsync();
                    dbContextTransaction.Commit();
                    stopwatch.Stop();
                }
                catch (Exception ex)
                {
                    dbContextTransaction.Rollback();
                    throw ex;
                }
            }
        }

如果不添加 opt (BulkInsertOptions 对象) 作为 BulkInsert 的参数,它会尝试与 SQLServer 连接(它不存在,所以我连接失败)。添加此 BulkOptions 与连接后,我得到异常连接已经是事务的一部分:/

传统方式(_context.TableName.Add() )当然有效,但它需要不可接受的时间。

知道我在这里做错了什么吗?

标签: oracleentity-frameworkentity-framework-6bulkinsertef-bulkinsert

解决方案


我找到了更好的方法(BulkInsert 仍然不合作)。我使用了这里提到的数组绑定

它将插入时间从约 6 分钟减少到约 1-1.5 秒:D(7770 条记录)


推荐阅读