我正在使用遗留应用程序通过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之间共享交易吗?
答案 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();