1

次のようなものをSystem.Data.OracleClient使用してOracleデータベースにアクセスするレガシーアプリケーションを使用しています:OracleTransaction

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 経由で行われるという決定を下しましたが、レガシー コードで使用されているのと同じトランザクションに参加したいと考えています。

いくつかの調査の後、私はその方法を発見しましたが、これは上記のように a ではなくObjectContext.Connection.EnlistTransaction()a を受け入れます。System.Transaction.TransactionOracleTransaction

したがって、レガシ コードと 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 に答える