すいません、今回もタイトルを決めるのにホッテントリメーカーを使いました。もう歳なのか、良い感じのタイトルが浮かばなくて困ります。
それはともかくとして、SQL Azure を使ったサービスを作る時にはリトライ処理を追加しておくのは、もはや常識と言っても過言ではないですよね。
今まではこのリトライ処理に Transient Fault Handling Application Block を使うことが基本だったと思うんですが、こないだ RC がリリースされたところの Entity Framework 6 では、フレームワークに SQL Azure 向けのストラテジクラスが追加されているので、これを使えば透過的にリトライを組み込めます。
しかし、デフォルトでは有効になっていないようなので「6 使ってるから大丈夫!」という感じで突っ込むと、多分悲惨なことになると思います。
なので、使う時には以下のように設定をしてあげましょう。
using System.Data.Entity; using System.Data.Entity.SqlServer; public class SampleDbConfiguration : DbConfiguration { public SampleDbConfiguration() { SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy()); } }
このクラスをプロジェクトに追加しておくと、Entity Framework が実行時に自動的に読み込んでくれるので、SQL の実行に使うストラテジクラスを SqlAzureExecutionStrategy に切り替えることが出来るという訳です。
簡単に設定できて良いですね。
ちなみに、Entity Framework 6 より古いバージョンでは NuGet に Reliable Db Provider というパッケージが公開されているので、これを使うと同じように透過的にリトライ処理が組み込めます。
NuGet Gallery | ReliableDbProvider 1.0.0
リトライの処理は Transient Fault Handling Application Block を利用しているようなので安心感がありますね。
くれぐれもコントローラとかにリトライロジックを組み込まないようにしたいものです。