Как использовать подсказку NOEXPAND с Linq to SQL? - PullRequest
5 голосов
/ 28 июня 2010

У меня есть индексированное представление, для которого мне нужно указать подсказку noexpand, чтобы она работала разумно. К сожалению, как видно из того, что касается изменения сгенерированного запроса Linq to SQL T-SQL из подсказки NOLOCK, кажется, что нет простого способа воспользоваться этими подсказками напрямую или нет?

Я думаю, что было бы целесообразно разрешить настройку этого материала с помощью атрибутов или декларативно через dbml. Кроме того, поскольку Linq to SQL, похоже, работает только для SQL Server, имеет смысл только то, что мы также можем использовать эти расширенные функции (если они существуют). Независимо от реализации, я заинтересован в любых творческих способах решения этой проблемы.

Ответы [ 2 ]

9 голосов
/ 28 июня 2010

Я нашел обходной путь, который, кажется, работает, но требует создания второго представления для каждого представления SQL, с которым можно использовать подсказку NOEXPAND.Во втором виде просто выберите все поля из исходного вида и нажмите на подсказку NOEXPAND.Любой запрос Linq to SQL, которому нужно использовать подсказку NOEXPAND, теперь может просто нацеливаться на это представление, которое оборачивает оригинал.

Более подробную информацию можно найти в этой записи MSDN .

Один недостаток, который следует учитывать при создании зависимых представлений, заключается в том, что вам нужно обязательно применять сценарии создания в правильном порядке зависимости

У кого-нибудь есть какие-нибудь лучшие альтернативы?Я бы предпочел не создавать дополнительные представления SQL только для поддержки использования этой необходимой подсказки оптимизатора.

2 голосов
/ 28 июня 2010

Я полностью согласен, но я не верю, что есть такой метод.В EF4 вы можете использовать ExecuteStoreCommand, который позволит вам выполнять SQL напрямую.Это может быть единственным вариантом, если производительность неприемлема.

== РЕДАКТИРОВАТЬ ==

Это также можно сделать в LINQ to SQL с помощью метода ExecuteQuery.

http://msdn.microsoft.com/en-us/library/bb399403.aspx

...