Dies ist ein bisschen eine offene Frage, aber ich wollte ein paar Meinungen, da ich in einer Welt aufgewachsen bin, in der Inline-SQL-Skripte die Norm waren. Dann wurden wir alle auf SQL-Injection-basierte Probleme aufmerksam gemacht und wie zerbrechlich der SQL-Code war, wenn überall Saitenmanipulationen durchführen.
Dann kam der Beginn des ORM, in dem Sie dem ORM die Abfrage erklärten und es sein eigenes SQL generieren ließen, was in vielen Fällen nicht optimal, aber sicher und einfach war. Ein weiterer Vorteil von ORMs oder Datenbankabstraktionsebenen war, dass SQL mit Blick auf die Datenbank-Engine generiert wurde, sodass ich Hibernate / Nhibernate mit MSSQL, MYSQL verwenden konnte und mein Code nie geändert wurde, sondern nur ein Konfigurationsdetail war.
Jetzt geht es schnell zum aktuellen Tag, an dem Micro-ORMs mehr Entwickler zu überzeugen scheinen. Ich habe mich gefragt, warum wir anscheinend eine Kehrtwende in Bezug auf das gesamte Inline-SQL-Thema vollzogen haben.
Ich muss zugeben, ich mag die Idee, keine ORM-Konfigurationsdateien zu haben und in der Lage zu sein, meine Abfrage optimaler zu schreiben, aber es fühlt sich an, als würde ich mich wieder den alten Schwachstellen wie SQL Injection öffnen und mich auch daran binden Eine Datenbank-Engine. Wenn meine Software mehrere Datenbank-Engines unterstützen soll, müsste ich mehr String-Hacker-Aktionen ausführen, die den Code unleserlicher und anfälliger machen. (Kurz bevor jemand es erwähnt, weiß ich, dass Sie parameterbasierte Argumente mit den meisten Mikroorganismen verwenden können, was in den meisten Fällen Schutz vor SQL-Injektionen bietet.)
Also, was sind die Meinungen der Menschen über diese Art von Dingen? In diesem Fall verwende ich Dapper als Mikro-ORM und NHibernate als reguläres ORM. Die meisten in den einzelnen Bereichen sind jedoch ziemlich ähnlich.
Was ich als Inline-SQL bezeichneist SQL-Zeichenfolgen im Quellcode. Früher gab es Designdebatten über SQL-Zeichenfolgen im Quellcode, die die grundlegende Intention der Logik beeinträchtigten, weshalb statisch typisierte Abfragen im Linq-Stil so populär wurden, dass es immer noch nur eine Sprache gibt, aber mit C # und Sql auf einer Seite 2 Sprachen vermischen sich jetzt in Ihrem rohen Quellcode. Zur Verdeutlichung: Die SQL-Injection ist nur eines der bekannten Probleme bei der Verwendung von SQL-Strings. Ich erwähne bereits, dass Sie dies bei parameterbasierten Abfragen verhindern können. Ich möchte jedoch auf andere Probleme hinweisen, bei denen SQL-Abfragen in Ihrem Quellcode verankert sind, z Das Fehlen der DB Vendor-Abstraktion sowie der Verlust jeglicher Kompilierzeitfehler bei der Erfassung von Zeichenfolgen-basierten Abfragen sind alles Probleme, die wir mit der Entstehung von ORMs mit ihrer höheren Abfragefunktionalität umgehen konnten.
Daher konzentriere ich mich weniger auf die einzelnen hervorgehobenen Probleme, und vor allem wird es jetzt akzeptabler, SQL-Zeichenfolgen wieder direkt in Ihrem Quellcode zu haben, da die meisten Micro-ORMs diesen Mechanismus verwenden.
Hier ist eine ähnliche Frage, die einige unterschiedliche Gesichtspunkte hat, obwohl es mehr um den Inline-SQL ohne den Mikro-Orm-Kontext geht:
https://stackoverflow.com/questions/5303746/is-inline-sql-hard-coding