首页 > 解决方案 > 与 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.OracleConnectionOracle.DataAccess.Client.OracleConnection. 这样的事情可能吗?

提前致谢。

标签: c#oracleodp.netoracle.manageddataaccess

解决方案


如果您有一个带有属性的存储库

Oracle.ManagedDataAccess.Client.OracleConnection DbConn

您可以通过使用基类来抽象它

System.Data.Common.DbConnection DbConn

现在,根据您需要的功能,您可以通过Oracle.ManagedDataAccess.Client.OracleConnectionOracle.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");

推荐阅读