Oracle.ManagedDataAccess数据库连接未正确克隆

时间:2019-03-19 11:06:04

标签: c# oracle oracle-manageddataaccess

我们正在针对.Net 4.6.1的C#应用​​程序中使用Oracle.ManagedDataAcces版本18.3.0。

如果已打开事务,则克隆连接时似乎存在问题。在这种情况下,克隆连接的事务未设置为null,如果将打开一个事务,则会迅速导致System.InvalidOperationException

GUI应用程序中的示例代码:

public partial class Form1 : Form
{
    public DbConnection LogonConnection { get; set; }
    public DbTransaction LogonTransaction { get; set; }
    public DbConnection FormConnection { get; set; }
    public DbTransaction FormTransaction { get; set; }

public Form1()
{
    InitializeComponent();
    LogonConnection = NewManagedConnection(); // Creates a new Oracle.ManagedDataAccess.Client.OracleConnection
    LogonConnection.Open();
    LogonTransaction = LogonConnection.BeginTransaction();

    // ... do the login ...

}

private void OpenForm_Click(object sender, EventArgs e)
{
    FormConnection = CloneManagedConnection(LogonConnection); // Clones the given connection.
    FormConnection.Open();
    FormTransaction = FormConnection.BeginTransaction(); // EXCEPTION
}

OpenForm_Click(..)方法导致所描述的异常。

Oracle文档状态:

  

克隆的对象具有与要克隆的对象相同的属性值。

对我来说,不清楚Oracle是否打算忽略现有事务并因此将其克隆(实际上使连接不可用)还是一个bug。你觉得呢?

我们最近从Oracle ODP(Oracle.DataAccess)迁移到托管连接。对于ODP连接,该异常是不可重现的,并且连接的克隆按预期工作。那么,如果ODP连接行为正确,那么托管连接行为是错误的吗?

0 个答案:

没有答案