Wenn ich habe eine Dapper.NET Abfrage wie so bekomme:Visual Studio Compiler-SQL-Validierung
conn.Execute("insert into My_Table values ('blah', 'blah, 'blah', 'blah')");
Wie kann ich Visual Studio zwingen zu tun Kompilierung-Überprüfung dieser Abfrage für ein bestimmtes Datenbankschema ? Ich bin mir bewusst, dass es Bibliotheken gibt, die eine Abfrageprüfung durchführen können (vorausgesetzt, eine Zeichenfolge und eine Verbindung), aber was ist das richtige Werkzeug für den Job hier?
Erweitern Sie Roslyn, um Strings zu untersuchen, die ich als Query Strings (mit einer Syntax ähnlich der bekannten @ "Unescaped String") markiere? Benutzerdefinierte Vorverarbeitung?
Oder stelle ich die falsche Frage? Wäre es sicherer, die gesamte Abfragelogik in gespeicherte Prozeduren innerhalb meines Datenbankprojekts zu übertragen (wodurch ich die Überprüfung der Abfrage selbst bekomme)? Jetzt, wo ich das schreibe, denke ich, werde ich tatsächlich mit dieser Lösung gehen, aber ich bin immer noch neugierig auf das Obige. Ich möchte in der Lage sein zu schreiben:
conn.Execute(#"insert into My_Table values ('blah',
'blah, 'blah', 'blah')"); //Hashtag to mark as query
Und den Compiler überprüfen Sie die Zeichenfolge für ein bestimmtes Datenbankschema.
Warum nicht eine Unit-Test-Bibliothek verwenden, um einige Repository-Tests zu erstellen? Damit könnten Sie kontrollierte Daten übergeben und das Ergebnis testen. –
Ich stimme zu, dass Komponententests meine Frage erschweren würden, aber ich denke immer noch, dass es etwas Kompilierzeit-Überprüfung gibt (vor allem weil es völlig automatisch ist und eine große Fehlerquelle für immer ohne weitere Anstrengung aus meinem Code entfernt) beteiligt). Ich bin leider ein Soloentwickler. – user3527893
Die beste Methode besteht darin, das Senden von Ad-hoc-Abfragen an den Server zu vermeiden. Alles in einer SQL Stored Procedure zu tun (wie Sie am Ende vorgeschlagen haben), ist der beste Weg, dies zu handhaben. Sie erhalten nicht nur eine Validierung Ihres SQL, sondern Sie können Ihren SQL-Server besser vor Angriffen schützen. – DunningKrugerEffect