Как мне контролировать отслеживание параметров и / или подсказки запросов в структуре сущностей?

Обновление: я предложил реализовать управление подсказками в будущей версии EF. Перейдите сюда, чтобы проголосовать за него.

У меня проблема, когда один из моих запросов Entity Framework (EF) очень долго выполняется на сервере Sql, хотя, когда я копирую и вставляю сгенерированный TSQL в Sql Server Management Studio (SSMS), он выполняется очень быстро. После некоторого расследования я обнаружил, что у меня проблема с анализом параметров, и правильный способ исправить - это вставка одной из многих подсказок запроса (ОПТИМИЗАЦИЯ ДЛЯ, РЕКОМЕНДАЦИЯ и т. д.). Как мне вставить эти подсказки в мои запросы EF?

Связанные с этим вопросы с разных точек зрения: здесь, здесь и здесь.


person Mike    schedule 27.03.2012    source источник


Ответы (2)


Чтобы применить подсказку к запросу, созданному EF, вы должны использовать руководства по плану, подробнее здесь: Соединение один к одному Недостаточно быстро в SQL Server

person Alireza    schedule 07.06.2012
comment
Есть ли у кого-нибудь реальный пример этого EF? - person Matt Burland; 05.11.2014
comment
Вы можете объяснить свой сценарий? Я столкнулся с этой проблемой очень давно, и окончательное решение было вокруг нее, а не до конца. - person Alireza; 05.11.2014
comment
Я придумал другое решение, основанное на перехватчиках, которые, я считаю, являются более новой функцией в EF (вероятно, не существовало на момент вашего ответа). См. stackoverflow.com/questions / 26761827 / - person Matt Burland; 05.11.2014
comment
Очень интересно, спасибо. - person Alireza; 06.11.2014

Если вы выполняете хранимые процедуры, вы можете объявить параметры хранимой процедуры внутренне.

I.e.

CREATE PROCEDURE sp_test
(
     @param1     NVARCHAR(10),
     @param2     INT
)

AS

DECLARE @internalParam1 NVARCHAR(10)
DECLARE @internalParam2 INT

SET @internalParam1 = @param1
SET @internalParam2 = @param2

-- REST OF YOUR QUERY

GO

Это остановит кэширование SQL Server любых параметров, передаваемых SP.

person Darren    schedule 27.03.2012
comment
Спасибо за ответ, но, к сожалению, я ищу способ добавить подсказки в запрос, который генерирует EF, а не в хранимую процедуру. - person Mike; 27.03.2012
comment
У меня был быстрый Google, и нет ничего очевидного для вашей проблемы с EF, другие ORMS, такие как NHibernate, разрешают подсказки запросов. Эти сообщения ниже являются наиболее близким решением вашей проблемы, которое я могу найти: stackoverflow.com/questions/8031069/ stackoverflow.com/questions/926656/entity-framework-with-nolock - person Darren; 27.03.2012