Azure で実行されている LINQ-TO-SQL を使用するかなり大きな Web アプリケーションがあり、SQL-Azure からの一時的なエラーが発生しているため、再試行を実装する必要があります。Transient Fault Handling Frameworkと、その使用方法の例を示すいくつかのサイトは知っていますが、LINQ クエリのすべてを次のようなものでラップする必要があるようです。
RetryPolicy retry = new RetryPolicy<MyRetryStrategy>(5, TimeSpan.FromSeconds(5));
Result = retry.ExecuteAction(() =>
{
… LINQ query here...
});
私のデータ層に何百もの LINQ クエリがあると、これは非常に面倒に見えます。さらに、多くの場合、結果が列挙されるまで実際にはクエリが実行されないという事実もあります。たとえば、データ層のほとんどの関数は、ビジネス層まで IQueryable<> を返します (これにより、リストを返すよりも柔軟になります)。つまり、ビジネス ロジック レイヤーにデータベースの再試行ロジックを散らかさなければならないということです。
したがって、再試行ロジックをデータレイヤーに保持するには、すべてのクエリに .ToList() を配置して、上のレイヤーではなく、すぐに実行されるようにする必要があると思います。
すべてのクエリを変更する必要がなく、一部の基本クラスに再試行ロジックを実装する方法があればいいのにと思います。EFにもこの問題があるようです。
自動再試行を行うように SQL-Azure チームに相談してみるのが本当の答えなので、コードでそれについて心配する必要はありませんか?