Использование BulkInsert с OracleDB - PullRequest
0 голосов
/ 03 июля 2018

У меня какая-то проблема с BulkInsert на моей OracleDB. Мне нужно вставить пару тысяч объектов, поэтому я решил использовать EF.BulkInsert.Oracle, добавленный Nuget, который является расширением EF6.BulkInsert для 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 ()), конечно, работает, но занимает недопустимое количество времени.

Есть идеи, что я здесь не так сделал?

1 Ответ

0 голосов
/ 05 июля 2018

Я нашел лучший способ (BulkInsert до сих пор не сотрудничают). Я использовал Array Binding упомянуто здесь

Уменьшено время вставки с ~ 6 минут до ~ 1-1,5 секунд: D (7770 записей)

...