Entity Framework を使用して SQL Server 2012 からデータを読み込む Web API があります。
リポジトリを作成し、Ninject とインターフェイスを使用して、Web API の具象クラスを使用します。
一部の Get リクエストでは、グラフほど大きくない JSON データを提供する必要がありますが、関係はかなり正規化されています。
JSON 形式でクライアントに返されるモデルにエンティティをマップしました。
したがって、次のクエリでは、このすべてのデータが必要です。
var result = _dbContext.Quotes.Where(
quote => quote.UserId == user.MemberId)
.Include(quote => quote.AdditionalRequirements)
.Include(quote => quote.QuoteSpecialRequirements.Select(qsr => qsr.RequirementType))
.Include(quote => quote.City)
.Include(quote => quote.Country)
.Include(quote => quote.Area)
.Include(quote => quote.Rooms.Select(room => room.RoomType)).ToList();
サービスを呼び出すと、EntityCommandExecutionException
InnerExceptionが発生し、「タイムアウトの期限が切れました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。」というメッセージが表示され、 「待機操作」というメッセージSystem.Data.SqlClient.SqlException
の InnerExceptionが発生します。System.ComponentModel.Win32Exception
タイムアウトしました"。
現在、データが増大したときに何が起こるか、これをどのように処理して将来的に効率化するかを検討しています。
代替案?クエリを再構築する必要がありますか?
Web API でタイムアウトの有効期限の値を延長する必要がありますか?
操作を Task.Run にラップすることで Web API 呼び出しのパフォーマンスが向上するかどうかを考えて、操作はまだ待ちきれません。
もう 1 つの解決策は、SQL Server の手順に進むことです。
[編集]
データベース内の関連テーブルを含む図のスクリーンショット。
これは、Entity Framework から作成され、プロファイラーを使用して取得されたクエリです。
ありがとうございました。