Как использовать подсказку NOEXPAND с Linq к SQL?

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

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

6
задан jpierson 28 June 2010 в 19:51
поделиться

2 ответа

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

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

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

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

10
ответ дан 9 December 2019 в 20:39
поделиться

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

== EDIT ==

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

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

2
ответ дан 9 December 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: