Dapper.Rainbow VS Dapper.Contrib

Может кто-нибудь объяснить, в чем разница между Dapper.Rainbow и Dapper.Contrib?

Я имею в виду, когда вы используете SqlMapperExtensions.cs Dapper.Contrib и когда вы должны использовать Dapper.Rainbow?

3 ответа

Решение

Я уже некоторое время использую Dapper и удивляюсь, что за проекты Contrib и Rainbow были обо мне. После небольшого обзора кода, вот мои мысли об их использовании:

Dapper.Contrib

Contrib предоставляет набор методов расширения в интерфейсе IDbConnection для основных операций CRUD:

  • Получить
  • Вставить
  • Обновить
  • удалять

Ключевым компонентом Contrib является то, что он обеспечивает отслеживание ваших организаций, чтобы определить, были ли внесены изменения.

Например, использование метода Get с интерфейсом в качестве ограничения типа вернет динамически сгенерированный прокси-класс с внутренним словарем, чтобы отслеживать, какие свойства изменились.

Затем вы можете использовать метод Update, который сгенерирует SQL, необходимый для обновления только тех свойств, которые изменились.

Важное предостережение: чтобы получить преимущество отслеживания Contrib, вы должны использовать интерфейс в качестве ограничения типа, чтобы можно было создать прокси-класс.

Dapper.Rainbow

Rainbow - это абстрактный класс, который вы можете использовать в качестве базового класса для ваших классов Dapper для обеспечения базовых операций CRUD:

  • Получить
  • Вставить
  • Обновить
  • удалять

А также некоторые часто используемые методы, такие как First (получает первую запись в таблице) и All (получает все записи результатов в таблице).

Для всех намерений и целей, Rainbow в основном является оболочкой для ваших наиболее часто используемых взаимодействий с базой данных и будет создавать скучный SQL на основе имен свойств и ограничений типов.

Например, с помощью операции Get Rainbow создаст ванильный SQL-запрос и вернет все столбцы, а затем отобразит эти значения обратно в тип, используемый в качестве ограничения.

Точно так же методы вставки / обновления будут динамически создавать SQL, необходимый для вставки / обновления, на основе имен свойств ограничения типа.

Важное предостережение: Rainbow ожидает, что все ваши таблицы будут иметь столбец идентификаторов с именем "Id".

Различия?

Основное различие между Contrib и Rainbow заключается в (IMO): один отслеживает изменения в ваших сущностях, а другой нет:

  • Используйте Contrib, если вы хотите отслеживать изменения в ваших сущностях.
  • Используйте Rainbow, когда вы хотите использовать что-то более похожее на стандартный подход ADO.NET.

На заметку: я бы хотел взглянуть на Rainbow раньше, так как создал очень похожий базовый класс, который я использую с Dapper.


Из статьи и цитаты @anthonyv цитируется: Эта досадная проблема INSERT, получение данных в БД

Теперь есть 2 других API, которые вы можете выбрать (кроме Rainbow) (для CRUD) Dapper.Contrib и Dapper Extensions. Я не думаю, что один размер подходит всем. В зависимости от вашей проблемы и предпочтений может быть API, который лучше всего подходит для вас. Я попытался представить некоторые варианты. Не существует благословенного "лучшего способа" решения всех проблем в мире.

Я подозреваю, что Сэм пытался передать в приведенной выше цитате и в соответствующем сообщении в блоге: Ваш сценарий может потребовать большого количества пользовательских сопоставлений (используйте vanilla Dapper), или может потребоваться отслеживать изменения сущностей (используйте Contrib), или вы можете У вас есть общие сценарии использования (используйте Rainbow), или вы можете использовать их все. Или даже не использовать Dapper. YMMV.

Этот пост Адама Андерсона описывает различия между несколькими библиотеками расширений CRUD Dapper:

  • Dapper Contrib (Автоматическое отслеживание изменений - только если оно грязное или нет, Атрибуты для пользовательского сопоставления, Нет поддержки составных ключей, Нет поддержки ручных ключей)
  • Dapper Rainbow (ручное отслеживание изменений с использованием Snapshotter, атрибуты для пользовательского сопоставления, без поддержки составных ключей, без поддержки ручных ключей)
  • Dapper Extensions (без отслеживания изменений, конфигурация Fluent для настраиваемого сопоставления, поддержка составных ключей, поддержка спецификации ключей вручную), также включает систему предикатов для простых запросов
  • Dapper SimpleCRUD (Без отслеживания изменений, Атрибуты для настраиваемого сопоставления, Без поддержки составного ключа, Поддерживает ручную спецификацию ключа), также включает помощников фильтрации / подкачки страниц, асинхронную поддержку, автоматическое генерирование класса POCO (через T4)

Отличия расширений Dapper

Сэм подробно описывает разницу в своем посте - http://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper.

По сути, его обычный размер не подходит для всех ответов, и мы сами решаем, какой подход выбрать в зависимости от ваших потребностей:

Теперь есть 2 других API, которые вы можете выбрать (кроме Rainbow) (для CRUD) Dapper.Contrib и Dapper Extensions. Я не думаю, что один размер подходит всем. В зависимости от вашей проблемы и предпочтений может быть API, который лучше всего подходит для вас. Я попытался представить некоторые варианты. Не существует благословенного "лучшего способа" решения всех проблем в мире.

Другие вопросы по тегам