Как использовать подсказку NOEXPAND с Linq to SQL?
У меня есть индексированное представление, для которого мне нужно указать подсказку noexpand, чтобы она работала разумно. К сожалению, с точки зрения изменения сгенерированного запроса Linq to SQL T-SQL из подсказки NOLOCK, кажется, что нет простого способа воспользоваться этими подсказками напрямую или нет?
Я думаю, что было бы целесообразно разрешить настройку этого материала с помощью атрибутов или декларативно через dbml. Кроме того, поскольку Linq to SQL, похоже, работает только для SQL Server, имеет смысл только то, что мы также можем использовать эти расширенные функции (если они существуют). Независимо от реализации, хотя я заинтересован в любых творческих способах решения этой проблемы.
2 ответа
Я нашел обходной путь, который, кажется, работает, но требует создания второго представления для каждого представления SQL, с которым можно использовать подсказку NOEXPAND. Во втором виде просто выберите все поля из исходного вида и нажмите на подсказку NOEXPAND. Любой запрос Linq to SQL, которому нужно использовать подсказку NOEXPAND, теперь может просто предназначаться для этого представления, которое оборачивает оригинал.
Более подробную информацию можно найти в этом сообщении MSDN.
Среди недостатков, которые следует учитывать при создании зависимых представлений, является то, что вам нужно обязательно применять сценарии создания в правильном порядке зависимости.
У кого-нибудь есть лучшие альтернативы? Я бы предпочел не создавать дополнительные представления SQL просто для поддержки использования этой необходимой подсказки оптимизатора.
Я полностью согласен, но я не верю, что есть такой метод. В EF4 вы можете использовать ExecuteStoreCommand
это позволит вам выполнять SQL напрямую. Это может быть единственным вариантом, если производительность неприемлема.
== EDIT ==
Вы также можете сделать это в LINQ to SQL через ExecuteQuery
метод.