2010-06-28 10 views
5

Ich habe eine indizierte Sicht, dass ich den NOEXPAND Hinweis für um angeben müssen für sie angemessen auszuführen. Wie man in Bezug auf das Ändern der von Linq in SQL generierten T-SQL-Abfrage aus dem NOLOCK-Hinweis sehen kann, scheint es leider keinen einfachen Weg zu geben, diese Hinweise direkt zu nutzen, oder gibt es sie?Wie den NOEXPAND-Hinweis mit Linq zu SQL verwenden?

Mein Gedanke ist, dass es Sinn Anpassung dieses Zeug durch die Verwendung von Attributen erlauben würde oder deklarativ durch die dbml. Da Linq to SQL anscheinend nur auf SQL Server abzielt, macht es nur Sinn, dass wir diese erweiterten Funktionen auch nutzen können (sofern sie vorhanden sind). Unabhängig von der Implementierung bin ich an kreativen Möglichkeiten interessiert, dieses Problem zu lösen.

Antwort

9

Ich habe eine Abhilfe gefunden, die erfordert scheint zu funktionieren, aber eine zweite Ansicht für jede SQL-Ansicht zu machen, die man sich wünschen würde mit dem NOEXPAND Hinweis zu verwenden. In der zweiten Ansicht wählen Sie einfach alle Felder aus der Originalansicht aus und heften den NOEXPAND-Hinweis an. Jede Linq to SQL-Abfrage, die den NOEXPAND-Hinweis verwenden muss, kann jetzt nur auf die Ansicht ausgerichtet werden, die das Original umschließt.

Weitere Details finden Sie in this MSDN post finden.

Eine Seite nach unten unter anderem zu berücksichtigen, wenn abhängigen Ansichten zu schaffen ist, dass Sie müssen sicherstellen, dass die Erstellungsskripts in der richtigen Abhängigkeit anzuwenden, um

Hat keine besseren Alternativen jemand hat? Ich möchte lieber keine zusätzlichen SQL-Ansichten erstellen, nur um die Verwendung dieses notwendigen Optimierungshinweises zu unterstützen.

2

Ich bin völlig einverstanden, aber ich glaube nicht, dass es ein solches Verfahren. In EF4 können Sie die ExecuteStoreCommand verwenden, mit der Sie SQL direkt ausführen können. Dies kann Ihre einzige Option sein, wenn die Leistung nicht akzeptabel ist.

== == EDIT

Sie können dies auch in LINQ tun durch die ExecuteQuery Methode SQL.

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

+0

Jetzt, Entity Framework mehr in der Lage ist immer ich es einen zweiten Blick zu nehmen und betrachten von Linq to SQL Schalt aber jetzt, wenn ich nicht genug zwingende Gründe und Zeit für die Forschung eine solche Umwandlung dann finden kann ich Ich bin mehr an einer Lösung für Linq to SQL interessiert. Ich werde die ExecuteStoreCommand-Funktion von EF4 als einen interessanten Vorteil hervorheben, auf den ich jetzt achten sollte. – jpierson

+2

Ja, oops. Ich habe sie jetzt synonym gelesen! :) Ich habe meine Antwort mit LINQ to SQL aktualisiert. Es macht nie Spaß, die architektonische Form zu durchbrechen und etwas wie eine SQL-Zeichenkette auszuführen, aber wenn man bedenkt, dass Sie bereits an SQL Server gebunden sind, ist der Einwand nur die der Reinheit, nicht der Praktikabilität. –

+0

In meinem speziellen Fall habe ich es mit rein verzögerten und hochdynamischen Abfragen zu tun, also glaube ich, dass es direkte Ausführungstechniken wie ExecuteQuery ausschließt. – jpierson