2012-03-15 29 views
-1

を保存しないように自分のデータを引き起こします。は、私はこのコードを持って

最後のステートメントthrowなしでこれを実行すると、エラーメッセージがデータベースに正常に保存されます。

私はそこにthrow;があるとそれは保存していると言いますが、私がデータベースに問い合わせるとそこにはありません。私はエンティティクエリをデータコンテキストを介して(コード内で)保存した直後に実行することもでき、保存されているかのように値を返します(ただし、キャッシュされたバージョンを使用している可能性があります)。しかし、私が行って後で質問すると、データはそこにはありません....

私は例外を除いて値が取り除かれていないことを確認しました。

何が原因なのですか?

+5

dbトランザクションをコミットしなかったような音がしますか? –

+0

しかし、ログをdbにコミットするコードはどこですか? – Tigran

+0

スタックのどこかのfinally文によってトランザクションがロールバックされていませんか? –

答えて

3

OK、ここでの答えとしてポスト、それは非常に簡単に私の心に来ます私はDBトランザクションをコミットしなかったということがわかっただけです。 ありがとう、:)

0

この呼び出しはNServiceBusメッセージの結果です。

私のNServiceBusは分散トランザクションで動作することを忘れていました。だから私が例外を投げたときに私のすべての保留中の変更をロールバックします。私は同じ問題を満たしたために使用されるよう

私はトランザクション外投稿するこのログファイルを取得する方法を見つける必要があり...

0

NServiceBusはこの種のものにフックを提供する可能性があります。

あなたの問題は、おそらくあなたが述べたことです:のメッセージ処理では、トランザクションではが発生します。あなたはできません他コミットすることもできますエラーをコミットしています。だから間違いなくどこにポストメッセージ処理の例外処理にフックできるかを調べる必要があります。

Shuttle ESB(http://shuttle.codeplex.com/)では、様々なユースケースを処理するためにパイプラインを使用し、さまざまなパイプラインによって生成されたPipelineExceptionイベントにフックできます。シャトルには、開発者がさまざまなイベントに関わるモジュールを追加する機能があります。あなたがやりたいことを多かれ少なかれ実行しているSystemExceptionModuleが既にあります。