在Entity Framework和Oracle Client之间共享oracle事务

时间:2013-02-19 17:11:14

标签: .net oracle entity-framework ado.net transactions

我正在使用遗留应用程序通过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

我们已决定所有新开发都将通过Entity Framework进行,但是我们想要参与遗留代码所使用的相同事务。

经过一些研究后,我发现了ObjectContext.Connection.EnlistTransaction()方法,但是它接受了System.Transaction.Transaction而不是OracleTransaction,如上所述。

因此可以在遗留代码和EF之间共享交易吗?

1 个答案:

答案 0 :(得分: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();