oracle - 将 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() )当然有效,但它需要不可接受的时间。
知道我在这里做错了什么吗?
解决方案
我找到了更好的方法(BulkInsert 仍然不合作)。我使用了这里提到的数组绑定
它将插入时间从约 6 分钟减少到约 1-1.5 秒:D(7770 条记录)
推荐阅读
- java - 无法从其他设备访问 Spring 服务器
- character - 如何在 R 数据中排除字符并仅包含数字
- html - 无法使 html5 背景视频响应
- python-3.x - 当我尝试使用 HashingVectorizer 时,Dask client.persist 返回 AssertionError
- hbase - Google Cloud Bigtable:用Java查询多个前缀扫描
- react-native - 如何让我的 expo 应用出现在另一个应用的分享列表中?
- vue.js - 想要访问使用 v-file-input 上传的文件
- node.js - Node JS如何将值保存到Mongo DB
- python - 如何使用 boto3 为 IAM 用户授予对 S3 存储桶的完全权限?
- laravel - SQLSTATE[HY000] [2002] php_network_getaddresses:名称解析暂时失败