1

情報を収集して最終的に自動車保険の見積もりに計算された保険料を与える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")
4

1 に答える 1

3

これは非常識です!!! 間違いなくアプリケーションアーキテクチャに戻り、考え直してください。私を信じてください:これらすべてのインクルードを単一のクエリに含める必要はありません。クエリを分割するか、予測を使用します。

発生したエラーは、エンティティが遅延読み込み(POCO)のプロキシである場合、またはエンティティがから派生している場合に発生しますEntityObjectobjectContext.ContextOptionsこれらのエンティティを読み込む前に、遅延読み込み()をオフにしてみてください。

于 2011-08-11T20:08:54.647 に答える