1

我正在使用一个遗留应用程序,该应用程序通过System.Data.OracleClient使用OracleTransaction如下方式访问 Oracle 数据库:

Public Sub ExecuteOracleSql(ByVal sql As String)
        Dim oCmd As New OracleCommand(sql, _dbConnection)
        Try
            oCmd.Transaction = _transaction 'OracleTransaction
            oCmd.ExecuteNonQuery()
        Finally
            oCmd.Dispose()
        End Try
    End Sub

从那以后,我们决定所有新的开发都将通过实体框架进行,但是我们希望加入到遗留代码正在使用的同一事务中。

经过一些研究,我发现了该ObjectContext.Connection.EnlistTransaction()方法,但是它接受 aSystem.Transaction.Transaction而不是OracleTransaction上面的 a 。

因此是否可以在遗留代码和 EF 之间共享事务?

4

1 回答 1

1

事实证明,这样做的方法是通过访问您的连接ObjectContext并将其转换为EntityConnection. 这样做可以让您使用普通的旧 ADO.NET(这正是我所需要的)。

    var lines = new BillLines.BillLines(); //This is the object context

    var conn = ((EntityConnection) lines.Connection).StoreConnection;
    conn.Open();

    var cmd = conn.CreateCommand();
    cmd.CommandText = sql;

    using (var reader = cmd.ExecuteReader())
    {
       //Access your data here
    }

    conn.Close();
于 2013-02-26T13:05:46.627 回答