2010-06-28 1 views
5

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

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

ответ

9

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

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

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

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

2

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

== EDIT ==

Вы также можете сделать это в LINQ для SQL с помощью метода ExecuteQuery.

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

+0

Теперь, Entity Framework становится все более способным я могу взять второй взгляд на него, и рассмотреть вопрос о переходе от Linq к SQL, но сейчас, если я не могу найти достаточно веские причины и время, чтобы исследовать такое преобразование, то я m больше интересуется решением для Linq to SQL. Я буду отмечать функцию ExecuteStoreCommand EF4 как интересное преимущество, на которое нужно обратить внимание. – jpierson

+2

Да, упс. Я читал их взаимозаменяемо в наши дни! :) Я обновил свой ответ с помощью LINQ to SQL. Никогда не забавно нарушать архитектурную форму и делать что-то вроде выполнения строки SQL, но, учитывая, что вы уже привязаны к SQL Server, возражение касается только чистоты, а не практичности. –

+0

В моем конкретном случае я имею дело с чисто отложенными и высокодинамичными запросами, поэтому я считаю, что это исключает методы прямого выполнения, такие как ExecuteQuery. – jpierson