与 DataAccess.Client.OracleConnection 分享 ManagedDataAccess.Client.OracleConnection connection/session/transaction

Share ManagedDataAccess.Client.OracleConnection connection/session/transaction with DataAccess.Client.OracleConnection

在我的应用程序中,我使用的存储库 class 具有 public Oracle.ManagedDataAccess.Client.OracleConnection DbConn 属性。在我使用此存储库的另一个 class 中,有一个特定的用例,我需要使用 OracleBulkCopy 以便从 Access 文件快速导入数据,不幸的是,它仍然不受支持Oracle 管理的 nuget。因此,我需要实例化 Oracle.DataAccess.Client.OracleConnection 并基于该连接创建 OracleBulkCopy。但我想将整个过程保留在一个事务中,包括通过存储库连接和 'non-Managed' OracleConnection 所做的更改。我可以看到完成的唯一方法是 'sharing' 存储库 Oracle.ManagedDataAccess.Client.OracleConnection 中的基础 connection/session/transaction 到 Oracle.DataAccess.Client.OracleConnection。 这样的事情可能吗?

提前致谢。

如果您的存储库带有 属性

Oracle.ManagedDataAccess.Client.OracleConnection DbConn

你可以使用基数抽象它 class

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");