在我的应用程序中,我正在使用具有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
。这样有可能吗?
提前感谢。
如果您的存储库具有属性
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");