2010-06-28 14 views
5

Ho una vista indicizzata che ho bisogno di specificare l'hint noexpand in modo che funzioni in modo ragionevole. Sfortunatamente, come visto per quanto riguarda la modifica della query T-SQL generata da Linq a SQL dal suggerimento NOLOCK, sembra che non ci sia un modo semplice per trarre vantaggio da questi suggerimenti direttamente o ci sono?Come utilizzare l'hint NOEXPAND con Linq su SQL?

Il mio pensiero è che avrebbe senso consentire la personalizzazione di queste cose attraverso l'uso di attributi o dichiarativamente attraverso il dbml. Inoltre, dal momento che Linq to SQL sembra funzionare solo con il targeting di SQL Server, è logico che siamo anche in grado di sfruttare queste funzionalità avanzate (se esistenti). Indipendentemente dall'implementazione, tuttavia, sono interessato a qualsiasi modo creativo per risolvere questo problema.

risposta

9

Ho trovato una soluzione alternativa che sembra funzionare ma richiede di creare una seconda vista per ciascuna vista SQL con cui si vorrebbe utilizzare l'hint NOEXPAND. Nella seconda vista basta selezionare tutti i campi dalla vista originale e virare sul suggerimento NOEXPAND. Qualsiasi query da Linq a SQL che deve utilizzare l'hint NOEXPAND ora può semplicemente indirizzare quella vista che avvolge l'originale.

Maggiori dettagli possono essere trovati in this MSDN post.

Un lato negativo, tra gli altri da considerare quando la creazione di viste dipendenti è che si dovrà fare in modo di applicare gli script di creazione nel corretto ordine di dipendenza

Qualcuno ha alternative migliori? Preferirei non dover creare viste SQL aggiuntive solo per supportare l'utilizzo di questo suggerimento di ottimizzazione necessario.

2

Sono assolutamente d'accordo, ma non credo che ci sia un tale metodo. In EF4 è possibile utilizzare lo ExecuteStoreCommand che consente di eseguire direttamente SQL. Questa potrebbe essere la tua unica opzione se la prestazione non è accettabile.

== == EDIT

È anche possibile farlo in LINQ to SQL attraverso il metodo ExecuteQuery.

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

+0

Ora che Entity Framework sta diventando sempre più capace io possa dare una seconda occhiata a esso e prendere in considerazione il passaggio da LINQ to SQL, ma per il momento a meno che non riesco a trovare abbastanza ragioni e tempo alla ricerca di tale conversione, allora I' convincenti Sono più interessato a una soluzione per Linq to SQL. Inserirò la funzione ExecuteStoreCommand di EF4 come un vantaggio interessante a cui badare per ora. – jpierson

+2

Sì, oops. Li ho letti in modo intercambiabile oggi! :) Ho aggiornato la mia risposta con LINQ a SQL. Non è mai divertente rompere lo stampo architettonico e fare qualcosa come eseguire una stringa SQL, ma considerando che sei già legato a SQL Server, l'obiezione è solo quella della purezza non della praticità. –

+0

Nel mio caso specifico ho a che fare con query puramente differite e altamente dinamiche quindi credo che escluda tecniche di esecuzione diretta come ExecuteQuery. – jpierson