Как использовать намек на NOEXPAND с LINQ для SQL?
-
01-10-2019 - |
Вопрос
У меня есть индексированный мнение, что мне нужно указать подсказку Noexpand для того, чтобы он был разумно выполнен. К сожалению, как видно в отношении модификации LINQ для SQL сгенерированного T-SQL-запроса от Nolock Hint, оказывается, что нет простого способа воспользоваться этими подсказками напрямую или есть?
Моя мысль состоит в том, что именно имеет смысл позволить настроить этот материал посредством использования атрибутов или декларационально через DBML. Также поскольку LINQ к SQL кажется, что работают только нацелевая на сервере SQL, оно имеет смысл, что мы также можем использовать эти расширенные функции (если они существуют). Независимо от реализации, хотя я заинтересован в любых творческих путях решения этой проблемы.
Решение
Я нашел обходной путь, который, по-видимому, работает, но требует выполнения второго представления для каждого представления SQL, который хочет использовать подсказку Noexpand. На втором представлении просто выберите все поля с исходного вида и прикреплению на подсказке NOEXPAND. Любой запрос SQL LINQ для SQL, который необходимо использовать подсказку NOEXPAND, теперь может просто нацелиться на то, что охватывает оригинал.
Дополнительные детали можно найти в Это сообщение MSDN.
Одна сторона среди других, чтобы рассмотреть вопрос о создании зависимых представлений, состоит в том, что вам нужно будет использовать сценарии создания в надлежащем порядке зависимости
У кого-нибудь есть лучшие альтернативы? Я бы предпочел не придется создавать дополнительные представления SQL только для поддержки использования этого необходимого оптимизатора.
Другие советы
Я полностью согласен, но я не верю, что есть такой метод. В EF4 вы можете использовать ExecuteStoreCommand
Это позволит вам выполнить SQL напрямую. Это может быть ваш единственный вариант, если производительность неприемлема.
== Редактировать ==.
Вы также можете сделать это в LINQ, чтобы SQL через ExecuteQuery
метод.