我的OracleDB上有一些关于OracleDB的问题。我需要插入几千个对象,所以我决定使用Nuget添加的EF.BulkInsert.Oracle,它是EF6.BulkInsertforOracle的扩展。
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() )当然可以工作,但它需要不可接受的时间。
知道我在这里做错了什么吗?
发布于 2018-07-05 07:47:02
我找到了更好的方法(BulkInsert仍然不合作)。我使用了数组绑定这里提到的
它将插入时间从~6分钟缩短到~1-1.5秒:D (7770条记录)
https://stackoverflow.com/questions/51154985
复制相似问题