c# - 与 DataAccess.Client.OracleConnection 共享 ManagedDataAccess.Client.OracleConnection 连接/会话/事务
问题描述
在我的应用程序中,我使用的是具有public Oracle.ManagedDataAccess.Client.OracleConnection DbConn
属性的 Repository 类。在我使用这个存储库的另一个类中,有一个特殊的用例,我需要使用OracleBulkCopy
's 以便从 Access 文件中快速导入数据,不幸的是,Oracle Managed nuget 仍然不支持。因此,我需要实例化 a并基于该连接Oracle.DataAccess.Client.OracleConnection
创建's。OracleBulkCopy
但我想将整个过程保留在事务中,包括通过存储库连接和 'non-Managed' 所做的更改OracleConnection
。我可以看到完成的唯一方法是将存储库中的底层连接/会话/事务“共享”Oracle.ManagedDataAccess.Client.OracleConnection
到Oracle.DataAccess.Client.OracleConnection
. 这样的事情可能吗?
提前致谢。
解决方案
如果您有一个带有属性的存储库
Oracle.ManagedDataAccess.Client.OracleConnection DbConn
您可以通过使用基类来抽象它
System.Data.Common.DbConnection DbConn
现在,根据您需要的功能,您可以通过Oracle.ManagedDataAccess.Client.OracleConnection
或Oracle.DataAccess.Client.OracleConnection
。
大多数函数都适用于这两个版本,但BulkCopy
仅适用于非托管版本。因此,在您的代码中,只需执行
if (DbConn is Oracle.DataAccess.Client.OracleConnection conn)
{
//. . . . Do your bulk copy
}
else
throw new InvalidOperationException("Bulk copy supported only by un-managed ODP");
推荐阅读
- php - 基于总输入量的 PHP 数字标签最大值
- python - 在主窗口中添加子窗口
- html - 视频源未在 html 视频标签中播放
- typescript - NestJS 网关依赖注入
- flutter - 来自 SocketClientConfig 的 initPayload 不接受类似 Json 的数据
- html - CSS:图像尺寸大于父级,但仅在水平边切割
- angular - mat-menu 无法正常工作 - Angular
- php - 找不到使用 laradock 的 postgres 驱动程序
- git - 在 git s 中是否可以创建一个指向标记的指针,该标记稍后可以移动以指向另一个标记?
- python - 我想在 Tkinter GUI 中按我的按钮来获取 iput,然后从我的列表中获取一个随机单词,而不是手动输入我的输入