Щеголеватый.Радуга против щеголя.ВНО


может кто-нибудь объяснить разницу между щеголь.Радуга и щеголь.Контриб?

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

3 63

3 ответа:

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

щеголь.Контриб

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

  • Get
  • вставить
  • обновление
  • удалить

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

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

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

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

щеголь.Радуга

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

  • Get
  • вставить
  • обновление
  • удалить

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

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

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

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

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

различия?

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

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

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


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

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

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

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

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

Dapper extensions differences

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

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

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