Могу ли я изменить sql, сгенерированный Entity Framework, перед его выполнением?

У меня есть многопользовательская база данных, которая возвращает очень разное количество строк в зависимости от того, какой арендатор запрашивается. В последнее время мы сталкиваемся с проблемой перехвата параметров, когда запросы Entity Framework (EF), выполняемые для одного клиента (TenantID = 1), занимают намного больше времени, чем тот же запрос для другого клиента (TenantID = 2). Я провел некоторое исследование и определил, что EF не поддерживает подсказки запроса (см. Этот вопрос), что позволило бы мне каждый раз принудительно перекомпилировать запрос. Теперь мне интересно, могу ли я перехватить запрос Sql, сгенерированный EF, и вручную добавить "OPTION (OPTIMIZE FOR UNKNOWN)" перед его выполнением. Это возможно? Является ли EF подключаемым, чтобы я мог изменить сгенерированный Sql до его выполнения? Есть ли примеры, как это сделать?

1 ответ

Вы пытались обойти проблему? Вы можете заставить EF не использовать параметр, например:

var q = Context.Tenants.Where(t => t.TenantID == tenantId);

... будет использовать параметр, но:

var r = Context.Tenants.Where(t => t.TenantID == 1);

... не буду, и я готов поспорить, что:

var s = Context.Tenants.Where("it.TenantID = 1");

... тоже не буду.

Другие вопросы по тегам