Подтвердить что ты не робот

Dapper.Rainbow VS Dapper.Contrib

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

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

4b9b3361

Ответ 1

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

Dapper.Contrib

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

  • Получить
  • Вставить
  • Update
  • Удалить

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

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

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

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

Dapper.Rainbow

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

  • Получить
  • Вставить
  • Update
  • Удалить

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

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

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

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

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

Различия?

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

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

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


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

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

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

Ответ 2

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

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

Dapper extensions differences

Ответ 3

Сэм подробно описывает, в чем разница в его должности - 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. Я не думаю, что это одноразовые. В зависимости от вашей проблемы и предпочтениями может быть API, который лучше всего подходит для вас. Я попытался введите некоторые из вариантов. Не существует благословенного "наилучшего пути" для решения каждая проблема в мире.