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 を使用してこれにアプローチする方法がわかりません。