Первые запуски наших запросов linq to EF занимают много времени. Я был удивлен, не увидев разницы после предварительной генерации представлений. Я наткнулся на следующее утверждение в stackoverflow.
Генерация представления помогает только для «стандартных» запросов (например, когда вы вызываете someObject.RelatedEnd.Load() или MyContext.SomeSetName(). По понятным причинам это не помогает для специальных запросов с LINQ или ESQL. Используйте CompiledQuery для оптимизировать тех.
Когда он говорит «по очевидным причинам», я должен сказать: «Ну, для меня пока не очевидно». Если я правильно понимаю, он утверждает, что на запросы Linq to SQL не влияет предварительное создание представлений EF.
Я думал, что представления сущностей являются общими сопоставлениями между сущностями и таблицами и не имеют никакого отношения к какому-либо конкретному запросу. Это ошибка?
Я вижу огромное количество времени, используемого при первом запуске наших запросов Linq to Entities, и значительно меньшее время после этого, поэтому я предположил, что представления генерируются для соответствующих сущностей и таблиц. Если это не представление EF, которое можно предварительно сгенерировать, используя все время первого запуска, то что это?
Итак, мой вопрос состоит из трех частей:
Создаются ли представления EF для каждого запроса или они просто связывают таблицы с сущностями независимо от сделанных запросов?
Верно ли приведенное выше утверждение о том, что предварительное создание представлений EF не имеет значения для запросов Linq to EF? Нужно ли вместо этого использовать CompileQueries?
- Каковы «очевидные причины», упомянутые выше?
Примечание. Я бы даже не спрашивал, но в Интернете есть довольно много рекомендаций (включая msdn) для предварительного создания представлений, если вы используете EF. Это единственное место, где я видел, что если вы используете Linq to Entities, то предварительная генерация не имеет отношения к вашим запросам.