我有一个 ASP .NET Web 表单应用程序,它收集信息以最终计算出汽车保险报价的保费。
我有大约 10 个屏幕来填充我们的根 CarRisk 对象,它具有诸如 CarRisk.Proposer、CarRisk.AdditionalDrivers 和 CarRisk.CarRiskehicle 之类的属性。
无论如何,当我进入报价摘要屏幕(总结在前几页中输入的数据)时,我遇到了问题。由于每个驱动程序都可以有索赔/定罪/医疗条件,并且这些条件中的每一个都与 claimType/convictionType 等有另一种关系,因此查询非常大。
我正在设法使用 CompiledQuery 将所有报价屏幕急切加载到摘要中,但是当我到达摘要时,EF 在尝试急切加载 CarRisk 时失败,因为它有 53 个包含。如果我尝试使用编译查询,查询甚至不会编译更不用说运行,它似乎只是导致 IIS 挂起!我有一种感觉,当我上次使用较少的包含(可能是 25 个)执行此操作时,我收到一个关于查询中使用的表过多的 SQL 服务器错误。我尝试将编译查询的结果合并到一个 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")