2013-02-19 55 views
1

我与访问Oracle数据库的传统应用程序通过使用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()方法,但是这个方法接受System.Transaction.Transaction而不是上面的OracleTransaction

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

回答

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();