Я хотел бы понять, когда кому-то действительно нужно подумать об использовании Dapper. Также я хотел бы понять плюсы и минусы сравнения Dapper Vs ADO.NET
Зачем использовать Dapper? Также можно прокомментировать Dapper Vs ADO.NET Плюсы и минусы
Ответ 1
Dapper - это просто инструмент. Что он делает:
- сделать тривиально легко правильно параметризовать запросы
- упростить выполнение запросов (скалярные, многострочные, многосеточные и безрезультатные)
- сделать тривиально легко превратить результаты в объекты
- очень эффективно и быстро
Что он не делает:
- создайте для вас модель класса
- генерировать запросы для вас
- отслеживать объекты и их изменения, чтобы вы могли просто вызвать
SubmitChanges()
(или что-то еще)
Необработанная библиотека dapper не предоставляет функции CRUD, но дополнительный пакет "contrib" предоставляет базовый CRUD.
В принципе, это не полный вес ORM, но если вы просто хотите запускать запросы без необходимости бороться с ORM или оплачивать накладные расходы, связанные с ORM, это довольно хорошо. Если вы не знаете SQL, необработанная библиотека, вероятно, не для вас ( "Contrib" должно быть хорошо, хотя), но многие люди не только знают SQL, но и хотят быть в состоянии управления SQL (вместо того, чтобы позволить ORM придумать некоторую интерпретацию вашего намерения, которое не было оптимизировано и т.д.).
Подводя итог, могут быть причины:
- вы хотите отличную производительность исполнения с минимальными накладными расходами
- вы хотите сохранить контроль над своим SQL
- вам не нужны или не нужны функции отслеживания объектов полножирной ORM
Что касается "vs ADO.NET":
- raw ADO.NET включает в себя лот больше кода для записи и много краевых дел, о которых нужно помнить (этот dapper имеет дело с внутренним, без необходимости беспокоиться о них)
- но на самом деле это не так быстро - dapper делает много метапрограмм для хранения и повторного использования стратегий, как только он сделал то, что нужно для вашего запроса.
- Если вы используете специфичные для провайдера функции, недоступные в сыром ADO.NET(например, передача/выборка данных
SqlGeometry
), они напрямую не доступны в dapper - вам нужно будет реализовать интерфейс чтобы описать, как обрабатывать ваш сценарий, но это не сложно (обратите внимание, что конкретный примерSqlGeometry
обрабатывается дополнительной библиотекой dapper).