私も同じ問題を抱えていました。私の場合、LINQ-To-SQLを使用しています(エンティティフレームワークにも同じことが当てはまると思います)。これが私が計画していることです。
リポジトリ パターンを使用して Linq-to-sql クエリを抽象化し、再試行メカニズムでデータベース リクエストを生成する Linq-to-sql コードをラップします。
そのために、と呼ばれるメソッドを作成し、ExecuteWithRetry(Action action)
このメソッドを次のように呼び出すことをお勧めしますExecuteWithRetry(()=> { db_Item item = model.db_Item.First(); });
メソッドはこのように実装できます
private void ExecuteWithRetry(Action action)
{
var retryStrategy = new Incremental(5, TimeSpan.FromSeconds(1),
TimeSpan.FromSeconds(2));
// Define your retry policy using the retry strategy and the Windows Azure storage
// transient fault detection strategy.
var retryPolicy =
new RetryPolicy<StorageTransientErrorDetectionStrategy>(retryStrategy);
// Receive notifications about retries.
retryPolicy.Retrying += (sender, args) =>
{
// Log details of the retry.
var msg = String.Format("Retry - Count:{0}, Delay:{1}, Exception:{2}",
args.CurrentRetryCount, args.Delay, args.LastException);
Trace.WriteLine(msg, "Information");
};
try
{
this.retryPolicy.ExecuteAction(action);
}
catch (Exception ex)
{
Trace.TraceError(ex.TraceInformation());
throw;
}
}
私もこのアプローチを試してみます。うまくいくことを願っています