35

SQL Server プロファイラーによるプロファイリング: EF 6 は、すべてのストアド プロシージャ呼び出しをBEGIN TRANandでラップしCOMMIT TRANます。

重大な変更ではありませんか?

おそらくこれは重大な変更であるだけでなく、ストアド プロシージャでトランザクションをロールバックできないROLLBACK TRANため (注: SQL Server にはネストされたトランザクションはありません)、SP でトランザクション ロジックを不可能にするため、1 回のロールバックで@@TRANCOUNTゼロにロールバックします。EF 6 のためにトランザクションを行っていたため、「EXECUTE 後のトランザクション カウントは、BEGIN ステートメントと COMMIT ステートメントの数が一致していないことを示しています。前のカウント = 1、現在のカウント = 0」を取得しました。標準の SQL Server エラーです。

ストアド プロシージャを呼び出す理由を聞かないでください。私は何百も持っていますが、それらはすべてTRY ... COMMIT ... CATCH ROLLBACKロジックを使用しています。

どうすればEF 6がこれを行うのを防ぐことができますか?

4

4 に答える 4

0

貢献するために、UnityをDI、EF 6.1.3、およびデータベースとして最初に使用しています。プロシージャまたは関数を呼び出したときに、「セッションで他のスレッドが実行されているため、新しいトランザクションは許可されていません」というメッセージが表示されました私のedmxファイルにマッピングされています。オプションEnsureTransactionsForFunctionsAndCommands = falseは問題を修正しました。Max Zerbini のソリューションも機能しましたが、プロシージャ コールごとにその方法を使用する必要がありました。

于 2016-10-24T13:57:32.990 に答える