Dapper.Rainbow VS Dapper.Contrib
Может ли кто-нибудь объяснить разницу между Dapper.Rainbow и Dapper.Contrib ?
Я имею в виду, когда вы используете SqlMapperExtensions.cs из Dapper.Contrib и когда вы должны использовать Dapper.Rainbow?
- Entity Framework слишком медленная. Какие у меня варианты?
- Список поставщиков Entity Framework для различных баз данных
- Как аннотировать поле автоинкремента MYSQL с аннотациями JPA
- Объекты ORM и сущности домена в Entity Framework 6.0
- Перечисление карты в JPA с фиксированными значениями?
- объект ссылается на несохраненный экземпляр переходного процесса - сохраняет временный экземпляр перед промывкой
- Указание индекса (не-уникальный ключ) с использованием JPA
- EntityManager закрыт
- Сохранение карты с использованием JPA
- Почему django prefetch_related () работает только со всеми (), а не с фильтром ()?
- Как обновить схемы таблиц базы данных с помощью генерации схемы NHibernate?
- Django - id vs pk
- Как следует использовать равенства и hash-код при использовании JPA и Hibernate
Я уже давно использую 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)
Сэм подробно описывает, в чем разница в его посте: 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, который лучше всего подходит для вас. Я попытался представить некоторые варианты. Не существует благословенного «наилучшего пути» для решения каждой проблемы в мире.