ADO.NET(EntityFramework)自動トランザクションが機能しない問題ADO.NETで自動トランザクションを効かせたプログラムコード(TransactionScopeクラスを用いたコード)を書いても、自動トランザクションが働かない場合がありました。 調査したところ、接続文字列にenlist=falseが指定されていました。 基本トランザクションマネージャとの通信が失敗しました。このエラーメッセージが出た時、MSDTCの設定で「セキュリティ>トランザクションマネージャー通信>相互認証を必要とする」にチェックが入っていると、トランザクションの最中にエラーが出てDBアクセスに失敗することがあります。この項目で「認証を必要としない」に設定すると、正常にトランザクションが実行されます。 詳細は以下のページも参照のこと。 トランザクション処理の途中でのエラートランザクションの状態に対して操作が有効ではありません。 このエラーメッセージが表示されるとき、TransactionScope.Completeメソッドの記述忘れがないか確認してみましょう。エラー発生個所の前の段階の処理を確認しましょう。このエラーは、ロールバックしたトランザクションに対して、DB処理を続けて行おうとしたときに発生します。 EntityFrameworkでSQL関数にマッピングされるCLRのメソッドEntityFrameworkでSQL関数にマッピングされるCLRのメソッドの一覧が、下記にまとめられています。 EntityFrameworkでSQL文を直接実行する方法下記URL参照。 IDENTITY列にInsertした時の値の取得方法Entity FrameworkまたはSqlCommandを使って、IDENTITY 列を持ったテーブルに行を挿入した時の IDENTITY 列の値を取得する方法です。 EntityFramework(CodeFirst)でdatetime2型のエラーが発生する原因と対応http://kazenetu.exblog.jp/18969119 EntityFrameworkで、app.configで定義した接続文字列の動的変更下記のようなコードで、変更可能。ただし、実行環境下でconfigファイルが書き換えられてしまうので、以後は永続的に有効になってしまう点に注意。
|