我们正在针对.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连接行为正确,那么托管连接行为是错误的吗?