与DataAccess.Client.OracleConnection共享ManagedDataAccess.Client.OracleConnection连接/会话/事务

问题描述 投票:2回答:1

在我的应用程序中,我正在使用具有public Oracle.ManagedDataAccess.Client.OracleConnection DbConn属性的存储库类。在另一个使用该存储库的类中,有一个特殊的用例,我需要使用OracleBulkCopy以便从Access文件中快速导入数据,但不幸的是,Oracle Managed nuget仍然不支持这种情况。因此,我需要实例化一个Oracle.DataAccess.Client.OracleConnection并基于该连接创建OracleBulkCopy。但是我想将整个过程都保留在事务中,包括通过存储库的连接所做的更改和“非托管” OracleConnection。我看到完成的唯一方法是将存储库的Oracle.ManagedDataAccess.Client.OracleConnection中的基础连接/会话/事务“共享”到Oracle.DataAccess.Client.OracleConnection。这样有可能吗?

提前感谢。

c# oracle odp.net oracle.manageddataaccess
1个回答
0
投票

如果您的存储库具有属性

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");
© www.soinside.com 2019 - 2024. All rights reserved.