Tôi đã xem xét cái gọi là "Micro ORM" như Dapper và (ở mức độ thấp hơn vì nó dựa trên .NET 4.0) vì chúng có thể dễ dàng thực hiện tại nơi làm việc hơn so với ORM toàn diện kể từ hệ thống hiện tại của chúng tôi rất phụ thuộc vào các thủ tục được lưu trữ và sẽ yêu cầu tái cấu trúc đáng kể để làm việc với ORM như NHibernate hoặc EF. Lợi ích của việc sử dụng một trong những thứ này trên ORM đầy đủ tính năng là gì? Có vẻ như chỉ là một lớp mỏng xung quanh kết nối cơ sở dữ liệu vẫn buộc bạn phải viết SQL thô - có lẽ tôi đã sai nhưng tôi luôn được cho biết lý do ORM ở nơi đầu tiên là vì vậy bạn không phải viết SQL, nó có thể được tạo tự động; đặc biệt đối với các phép nối nhiều bảng và ánh xạ các mối quan hệ giữa các bảng là một vấn đề khó thực hiện trong SQL thuần túy nhưng tầm thường với ORM.
Chẳng hạn, nhìn vào một ví dụ về Dapper:
var connection = new SqlConnection(); // setup here...
var person = connection.Query<Person>("select * from people where PersonId = @personId", new { PersonId = 42 });
Làm thế nào khác với việc sử dụng lớp dữ liệu ADO.NET được điều khiển, ngoại trừ việc bạn không phải viết lệnh, đặt tham số và tôi cho rằng ánh xạ lại thực thể bằng Builder. Có vẻ như bạn thậm chí có thể sử dụng một cuộc gọi thủ tục được lưu trữ dưới dạng chuỗi SQL.
Có những lợi ích hữu hình nào khác mà tôi đang thiếu ở đây khi sử dụng Micro ORM hợp lý không? Tôi không thực sự thấy cách nó tiết kiệm bất cứ thứ gì qua cách sử dụng ADO.NET "cũ" ngoại trừ có thể một vài dòng mã - bạn vẫn phải viết để tìm ra SQL nào bạn cần thực thi (có thể có lông) và bạn vẫn phải ánh xạ mối quan hệ giữa các bảng (phần mà IMHO ORM giúp ích nhiều nhất).
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id", new { Age = (int?)null, Id = guid });
và sau đó dog.First().Age
truy cập các thuộc tính.