与 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.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");
在我的应用程序中,我使用的存储库 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.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");