将 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 条记录)
我的 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 条记录)