Я изучал так называемые «микро ORM», такие как Dapper и (в меньшей степени, поскольку он опирается на .NET 4.0), поскольку они могут быть проще в работе, чем полноценный ORM, так как наша текущая система сильно зависит от хранимых процедур и потребует значительного рефакторинга для работы с ORM, такими как NHibernate или EF. В чем преимущество использования одного из них по сравнению с полнофункциональным ORM? Кажется, что это просто тонкий слой вокруг соединения с базой данных, который все еще заставляет вас писать сырой SQL - возможно, я ошибаюсь, но мне всегда говорили, что причина ORM в первую очередь в том, что вам не нужно было писать SQL, это может быть создан автоматически; особенно для объединений в несколько таблиц и отображения связей между таблицами, что является трудной задачей в чистом SQL, но тривиально с ORM.
Например, глядя на пример Dapper:
var connection = new SqlConnection(); // setup here...
var person = connection.Query<Person>("select * from people where PersonId = @personId", new { PersonId = 42 });
Чем это отличается от использования уровня данных ADO.NET с ручным управлением, за исключением того, что вам не нужно писать команду, устанавливать параметры, и я полагаю, сопоставить сущность обратно с помощью Builder. Похоже, вы даже можете использовать вызов хранимой процедуры в качестве строки SQL.
Есть ли другие ощутимые преимущества, которые я здесь упускаю, когда Micro ORM имеет смысл использовать? Я на самом деле не вижу, как он сохраняет что-то по сравнению со «старым» способом использования ADO.NET, за исключением, может быть, нескольких строк кода - вам все еще нужно написать, чтобы выяснить, какой SQL вам нужно выполнить (что может стать проблематичным) и вам все еще нужно отобразить отношения между таблицами (часть, с которой ORMs IMHO помогают больше всего).
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });
а затем dog.First().Age
получить доступ к свойствам.