Я использую EF6
У меня есть общая таблица, которая содержит данные для различных типов объектов классов, используя подход «Таблица на иерархию». Кроме того, эти объекты класса используют сложные типы для определения типов для их свойств.
Итак, используя вымышленный пример,
Стол = Человек
«Майк Учитель» - это «Учитель», экземпляр Person с personType «Учителя»
Экземпляр "Учитель" имеет 2 свойства: complextypePersonalDetails и complextypeAddress.
complextypePersonalDetails содержит
Имя, Фамилия и Возраст.
complextypeAddress содержит
HouseName, улица, город, город, округ.
Я допускаю, что этот дизайн может быть чрезмерным, и проблема может заключаться в том, что я его сделал, но кроме этого я хотел проверить, могу ли я больше делать с EF6, прежде чем переписать его.
Я выполняю профилирование кода с помощью JetBrains DotTrace.
При первом звонке, скажем, на
personTeacher = db.person.OfType (). First ()
Я получаю огромную задержку около 150 000 мс
вокруг:
SerializedGeneratedViewOfType (150,000ms)
TryGenerateQueryViewOfType
GenerateTypeSpecificQueryView
GenerateQueryViewForSingleExtent
GenerateQueryViewForExtentAndType
GenerateViewsForExtentAndType
GenerateViewComponents
EnsureExtentIsFullyMapped (90,000ms)
GenerateCaseStatements (60,000ms)
Я создал предварительно сгенерированное представление, используя пакет nuget "InteractivePreGeneratedViews", который создает SQL. Однако даже с этим мне все еще нужно подвергнуться моему первому удару. Кроме того, похоже, что это происходит каждый раз при перезапуске веб-сервера / веб-сайта / AppPool.
Я не совсем уверен в процессе EF, но я полагаю, что при запуске веб-приложения есть еще одна форма компиляции или кэширования во время выполнения. Где это может происходить, и есть ли упреждающий метод, который я мог бы использовать, чтобы прегенерировать / прекомпилировать / предварительно кэшировать эту проблему.
В среднесрочной перспективе мы перепишем этот код в Dapper или EF.Core. Итак, пока что есть мысли о том, что можно сделать?
Спасибо.