Dapper.Rainbow VS Dapper.Contrib

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

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

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

Dapper.Contrib

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

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

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

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

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

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

Dapper.Rainbow

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

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

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

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

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

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

Основная оговорка : Rainbow ожидает, что все ваши таблицы будут иметь столбец идентификации с именем «Id».

Различия?

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

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

На стороне примечания: Мне жаль, что я раньше не изучал Радугу, так как я создал очень похожий базовый class, который я использую с 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 (Нет отслеживания изменений, Свободная конфигурация для пользовательского сопоставления, Поддержка составных клавиш, Поддержка спецификации ручного ключа), также включает в себя систему предикатов для простых запросов
  • Dapper SimpleCRUD (без отслеживания изменений, атрибуты для пользовательского сопоставления, поддержка композитных клавиш, поддержка спецификации ручного ключа), также включает в себя помощники фильтрации / подкачки, поддержку async, автоматическое создание classа POCO (через T4)

Различия в расширениях Dapper

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

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

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

  • Когда Hibernate сбрасывает сеанс, как он решает, какие объекты в сеансе загрязнены?
  • Лучшие бесплатные инструменты ORM для использования с .NET 2.0 / 3.5
  • Как удалить объект с отношениями ManyToMany в JPA (и соответствующие строки таблицы соединений)?
  • Можно ли динамически определять имена столбцов в Hibernate / JPA?
  • получение результата в DTO с собственным SQL-запросом в спящем режиме
  • org.hibernate.MappingException: Не удалось определить тип для: java.util.List, at table: College, для столбцов:
  • Перечисление карты в JPA с фиксированными значениями?
  • Родные запросы JPA / Hibernate не распознают параметры
  • Получение соединения с базой данных в чистой настройке JPA
  • Уникальные поля, допускающие нули в Django
  • JPA CriteriaBuilder - Как использовать оператор сравнения «IN»
  • Interesting Posts
    Давайте будем гением компьютера.