0

EF 4.3 Code First (EF) で作成されたリポジトリと、通常の SqlCommand (SQLCMD) を使用する別のリポジトリがあります。EF は接続オブジェクトを SQLCMD に渡すため、両方が同じ接続を使用しています。

EF でエンティティを作成し、エンティティ ID を使用して SQLCMD で他の操作を行います。もちろん、エンティティが存在する必要があります。存在しないと、FK エラーが発生します。うまく機能しますが、両方の操作を同じトランザクションに保持する必要があるため、何か問題が発生した場合は両方がロールバックされます。

両方を同じ TransactionScope でラップすると機能しません。SQLCMD は EF によって作成されたエンティティを認識できません。しかし、TransactionScope を削除すると、再び機能します。エラーは常に同じで、間違った FK に関する SQL エラーです。

コンピューターで MSDTC を有効にしようとしましたが、まだ機能していません。どちらも同じ接続を使用するため、これは問題にはなりません。

使用後に EF が接続を閉じることに気付いたので、SQLCMD が接続を取得したら、再度開く必要があります。これが問題でしょうか?

これは Windows 7 x64 Ultimate と SqlServer 2008 です。

何が問題ですか?ありがとう!

編集:

どうやら問題は、SQLCMD でタスクを使用していることです。それは 1 つではなく、一連の連鎖です。TransactionDependantClone を使用してこれにアプローチする方法がわかりません。

4

1 に答える 1

1

EF クエリの実行時に接続が閉じられている場合にのみ、EF は接続を閉じます。最初に接続を手動で開いた場合 (たとえば、開いている接続をコンテキストに渡すことによって)、EF はそれを閉じません。したがって、これを行うと、EF が接続を閉じるのを防ぐことができます。

于 2012-10-04T12:22:02.530 に答える