前提・実現したいこと
トランザクションを利用した状態で、
SQLServerにデータを登録し、関数を呼び出して検証を行い、
問題がなければSQLServerに登録したデータをDb2に登録したいです。
データの安全性を担保するため、エラーの場合、Rollback()で一括して更新前に戻したいです。
なお、呼び出した関数からSQLServerにアクセスする際データの参照のみで登録や更新は行わないです。
発生している問題・エラーメッセージ
トランザクションを利用して関数を呼び出したとき、
その関数からSQLServerにアクセスすると、タイムアウトが発生してしまいます。
該当のソースコード
//Entity Frameworkを利用してSQLServerにアクセスしています private DB_Entities db = new DB_Entities(); using (DbContextTransaction tran = db.Database.BeginTransaction()) { try { //SQLServerにデータを登録・削除・更新する処理 ⋮ //上記の内容を保存します db.SavesChange(); //DB2に登録する関数 DB2func(db); //全ての処理がうまくいった場合のみコミットします tran.Commit(); }catch{ //どこかでエラーが起きたらロールバックします tran.Rollback(); } }
function DB2func(DB_Entities db){ try{ //ここでタイムアウトが発生してしまします。 var LIST_ITEM = db.TABLE_ITEM.ToLIST(); //DB2に登録する処理 ⋮ }catch{ //登録したDB2の内容を削除する throw new Exception("エラー") } }
試したこと
トランザクションを外したら問題なく最後まで動くのですが…。
エラーが起きた際の対応を考えたら、トランザクションを外さずどうにかしたいです。
補足情報(FW/ツールのバージョンなど)
Visual Studio2013
よろしくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/10 08:16
2019/05/10 08:26
2019/05/10 08:31
2019/05/10 08:34
2019/05/10 09:18
2019/05/10 09:48
2019/05/10 10:02
2019/05/10 10:04
2019/05/13 01:30