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

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

1 Ответ

1 голос
/ 28 марта 2012

Вы пытались обойти проблему? Возможно, вы сможете заставить 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");

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

...