情報を収集して最終的に自動車保険の見積もりに計算された保険料を与えるASP.NETWebフォームアプリケーションがあります。
ルートCarRiskオブジェクトにデータを入力する画面が約10個あります。これには、CarRisk.Proposer、CarRisk.AdditionalDrivers、CarRisk.CarRiskVehicleなどのプロパティがあります。
とにかく、見積もりの概要画面(前のページで入力したデータをまとめたもの)が表示されたときに問題が発生しました。各ドライバーはクレーム/有罪判決/医学的状態を持つことができ、これらのそれぞれはclaimType / convictionTypeなどと別の関係を持っているので、クエリは非常に大きくなります。
CompiledQueryを使用して、要約までのすべての見積もり画面を熱心にロードしようとしていますが、要約に到達すると、53個のインクルードがあるためCarRiskを熱心にロードしようとするとEFが失敗します。コンパイルされたクエリを使用しようとすると、実行はもちろんのこと、クエリもコンパイルされません。IISがハングする原因になっているようです。少ないインクルード(おそらく25)でこれを最後に行ったときに、クエリで使用されているテーブルが多すぎるというSQLサーバーエラーが発生したように感じます。コンパイルされたクエリの結果を1つのcarRiskに結合しようとしましたが、CarRisk.CarRiskVehicle = carRiskCarRiskVehicleCompiledQuery.CarRiskVehicleのように設定しようとするとエラーが発生しますが、「EntityCollectionはすでに初期化されています。
だから私は遅延読み込みに戻りましたが、それはかなり遅く、クライアントはパフォーマンスの低下に不満を持っています。LazyLoading中にChangeTrackingをオフにしようとしましたが、大幅な改善とは言えません。
私が何をすべきかについての提案/アイデアはありますか?
以下にインクルードを表示して、確認できるようにします
ent.CarRisks
.Include("BusinessSource") // Risk Includes
.Include("PreviousInsuranceDetail")
.Include("Quote.QuoteStatus")
.Include("ClassOfUse") // CarRisk Includes
.Include("CoverType")
.Include("ReferralSource")
.Include("MainDriver")
.Include("VoluntaryExcess")
.Include("UserSpecifiedNumberOfDrivers")
.Include("Proposer.Address") // Proposer Includes
.Include("Proposer.NumberOfOtherVehiclesAvailable")
.Include("Proposer.OwnersClub")
.Include("Proposer.BusinessCategory") // CarDriver Includes
.Include("Proposer.BusinessCategory2")
.Include("Proposer.EmploymentStatus")
.Include("Proposer.EmploymentStatus2")
.Include("Proposer.Gender")
.Include("Proposer.LicenceType")
.Include("Proposer.MaritalStatus")
.Include("Proposer.Occupation")
.Include("Proposer.Occupation2")
.Include("Proposer.Title")
.Include("Proposer.Claims.ClaimStatus")
.Include("Proposer.Claims.ClaimType")
.Include("Proposer.Convictions.ConvictionCode")
.Include("Proposer.Convictions.ConvictionTestMethod")
.Include("AdditionalDrivers.RelationshipToPolicyHolder")
.Include("AdditionalDrivers.BusinessCategory") // CarDriver Includes
.Include("AdditionalDrivers.BusinessCategory2")
.Include("AdditionalDrivers.EmploymentStatus")
.Include("AdditionalDrivers.EmploymentStatus2")
.Include("AdditionalDrivers.Gender")
.Include("AdditionalDrivers.LicenceType")
.Include("AdditionalDrivers.MaritalStatus")
.Include("AdditionalDrivers.Occupation")
.Include("AdditionalDrivers.Occupation2")
.Include("AdditionalDrivers.Title")
.Include("AdditionalDrivers.Claims.ClaimStatus")
.Include("AdditionalDrivers.Claims.ClaimType")
.Include("AdditionalDrivers.Convictions.ConvictionCode")
.Include("AdditionalDrivers.Convictions.ConvictionTestMethod")
.Include("CarRiskVehicle.Car")
.Include("CarRiskVehicle.OvernightParkLocation")
.Include("CarRiskVehicle.RegisteredKeeper")
.Include("CarRiskVehicle.RegisteredOwner")
.Include("CarRiskVehicle.Transmission")
.Include("CarRiskVehicle.Modifications")
.Include("CarRiskVehicle.CarRiskVehicleSecurityDevices")
.Include("CarRiskVehicle.MotorHomeType")
.Include("CarRiskVehicle.AlarmType")
.Include("CarRiskVehicle.TrackerType")
.Include("CarRiskVehicle.Address")