将 BulkInsert 与 OracleDB 结合使用

Using BulkInsert with OracleDB

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

          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() ) 当然有效,但花费的时间无法接受。

知道我做错了什么吗?

我找到了更好的方法(BulkInsert 仍然不配合)。我使用数组绑定 mentioned here

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