У меня есть приложение для веб-форм ASP .NET, которое собирает информацию, чтобы в конечном итоге дать рассчитанную премию за квоту по страхованию автомобиля.
У меня есть около 10 экранов, на которых мы заполняем наш корневой объект CarRisk, у него есть такие свойства, как CarRisk.Proposer, CarRisk.AdditionalDrivers & CarRisk.CarRiskVehicle.
Во всяком случае, у меня возникла проблема, когда я попадаю на экран сводки котировок (суммирует данные, введенные на предыдущих страницах). Поскольку у каждого водителя могут быть претензии / осуждения / медицинские условия, и у каждого из них есть другое отношение к ApplicType / convictionType и т. Д., Запрос очень велик.
Мне удается загружать все экраны с цитатами до сводки, используя CompiledQuery, но когда я получаю сводку, EF не удается при попытке загрузить CarRisk, поскольку он имеет 53 включений. Если я попытаюсь использовать скомпилированный запрос, запрос даже не скомпилируется, не говоря уже о запуске, просто кажется, что IIS зависает! У меня возникает ощущение, что когда я в последний раз делал это с меньшим количеством включений (возможно, 25), я получал ошибку сервера SQL из-за слишком большого количества таблиц, используемых в запросе. Я попытался объединить результаты скомпилированных запросов в один carRisk, но у меня возникает ошибка при попытке установить что-то вроде CarRisk.CarRiskVehicle = carRiskCarRiskVehicleCompiledQuery.CarRiskVehicle, но я получаю ошибку "EntityCollection уже инициализирован. Метод InitializeRelatedCollection должен только быть вызванным для инициализации новой коллекции EntityCollection во время десериализации графа объектов. ".
Итак, я вернулся к отложенной загрузке, но это происходит намного медленнее, и клиент недоволен снижением производительности. Я пытался отключить ChangeTracking во время LazyLoading, но не могу сказать, что это значительное улучшение.
Любые предложения / идеи о том, что я должен делать?
Я покажу вам включенные ниже, чтобы вы могли видеть
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")