Ich habe mich mit sogenannten "Mikro-ORMs" wie Dapper beschäftigt und (in geringerem Maße, da es sich auf .NET 4.0 stützt) Massive, da diese bei der Arbeit möglicherweise einfacher zu implementieren sind als ein vollwertiges ORM seit unserem aktuellen System ist in hohem Maße auf gespeicherte Prozeduren angewiesen und würde ein erhebliches Refactoring erfordern, um mit einem ORM wie NHibernate oder EF zu arbeiten. Was ist der Vorteil einer dieser Funktionen gegenüber einem ORM mit vollem Funktionsumfang? Es scheint , als nur eine dünne Schicht um eine Datenbank - Verbindung , dass Sie noch Kräfte roh SQL zu schreiben - vielleicht bin ich falsch , aber ich war immer der Grund für ORMs gesagt in erster Linie ist , so dass Sie nicht haben , SQL zu schreiben, es könnte automatisch generiert werden; Insbesondere für Verknüpfungen mit mehreren Tabellen und das Zuordnen von Beziehungen zwischen Tabellen, die in reinem SQL nur schwer möglich, mit einem ORM jedoch trivial sind.
Ein Beispiel für Dapper:
var connection = new SqlConnection(); // setup here...
var person = connection.Query<Person>("select * from people where PersonId = @personId", new { PersonId = 42 });
Wie unterscheidet sich das von der Verwendung einer handgehaltenen ADO.NET-Datenschicht, mit der Ausnahme, dass Sie den Befehl nicht schreiben müssen, die Parameter festlegen und die Entität vermutlich mit einem Builder zurückmappen. Sie könnten sogar einen Aufruf einer gespeicherten Prozedur als SQL-Zeichenfolge verwenden.
Gibt es andere greifbare Vorteile, die ich hier vermisse, wo die Verwendung eines Mikro-ORM sinnvoll ist? Ich sehe nicht wirklich, wie es etwas über die "alte" Art der Verwendung von ADO.NET spart, außer vielleicht ein paar Zeilen Code - Sie müssen noch schreiben, um herauszufinden, welches SQL Sie ausführen müssen (was haarig werden kann) und Sie müssen noch Beziehungen zwischen Tabellen abbilden (der Teil, bei dem IMHO ORMs am meisten helfen).
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });
und dann, dog.First().Age
um auf Eigenschaften zuzugreifen.