Я заинтересован в использовании Dapper - но насколько я могу судить, он поддерживает только Query и Execute. Я не вижу, что Dapper включает в себя способ вставки и обновления объектов.
Учитывая, что нашему проекту (большинству проектов?) Нужно делать вставки и обновления, как лучше всего делать вставки и обновления вместе с dapper?
Желательно, чтобы нам не приходилось прибегать к методу построения параметров ADO.NET и т. Д.
Лучший ответ, который я могу придумать на данный момент, - это использовать LinqToSQL для вставок и обновлений. Есть ли лучший ответ?
Ответы:
Мы смотрим на создание нескольких помощников, все еще выбирая API, и идет ли это в ядре или нет. См. Https://code.google.com/archive/p/dapper-dot-net/issues/6 для прогресса.
В то же время вы можете сделать следующее
и так далее
Смотрите также мой пост в блоге: Эта раздражающая проблема INSERT
Обновить
Как указано в комментариях, теперь в проекте Dapper.Contrib доступно несколько расширений в виде этих
IDbConnection
методов расширения:источник
set
какcnn.Execute("update Table SET val = @val where Id = @id", new {val, id = 1});
или это специфично? Я новичок в Dapper и искал пример обновления :)var updateCat = connection.Execute("UPDATE tCategories SET sCategory = @val WHERE iCategoryID = @id", new { val = "dapper test", id = 23 });
и это сработало. Без использования SET я получаю ошибку синтаксиса SQLException около sCategory.Выполнение CRUD-операций с использованием Dapper - простая задача. Я упомянул ниже примеры, которые должны помочь вам в операциях CRUD.
Код для C RUD:
Метод № 1: Этот метод используется при вставке значений из разных объектов.
Метод № 2: Этот метод используется, когда ваши свойства сущностей имеют те же имена, что и столбцы SQL. Таким образом, Dapper как ORM отображает свойства сущности с соответствующими столбцами SQL.
Код для C R UD:
Код для ЧР U D:
Код для CRU D :
источник
Вы можете сделать это таким образом:
источник
using-statement
так, чтобы соединение закрывалось даже в случае исключения.sqlConnection.Execute(sqlQuery, customerEntity);
sqlConnection.Execute(sqlQuery, customerEntity);
Используя Dapper.Contrib это так просто:
Вставить список:
Вставить один:
Обновление списка:
Обновление сингла:
Источник: https://github.com/StackExchange/Dapper/tree/master/Dapper.Contrib
источник
conn.Update(yourClass)
случае некоторые свойства равны нулю , то ОБНОВЛЕНИЕ поля на NULL ? Не работает. Обновите поле до NULL .Not partials updates
Вы также можете использовать dapper с хранимой процедурой и общим способом, которым все легко управляется.
Определите вашу связь:
Создайте интерфейс для определения методов Dapper, которые вам действительно нужны:
Реализуем интерфейс:
Теперь вы можете позвонить из модели по мере необходимости:
Вы также можете передать параметры:
Теперь звоните с ваших контроллеров:
Надеюсь, что это предотвратит повторение вашего кода и обеспечит безопасность;
источник
Вы можете попробовать это:
источник
Вместо того, чтобы использовать какую-либо стороннюю библиотеку для операций с запросами, я бы предпочел писать запросы самостоятельно. Потому что использование любых других сторонних пакетов лишило бы главного преимущества использования dapper, то есть гибкости при написании запросов.
Теперь существует проблема с написанием запроса вставки или обновления для всего объекта. Для этого можно просто создать помощников, как показано ниже:
InsertQueryBuilder:
Теперь, просто передавая имя столбца для вставки, весь запрос будет создан автоматически, как показано ниже:
Вы также можете изменить функцию, чтобы она возвращала весь оператор INSERT, передав параметр TableName.
Убедитесь, что имена свойств класса совпадают с именами полей в базе данных. Только тогда вы можете передать весь объект (как в нашем случае userObj), и значения будут отображены автоматически.
Таким же образом у вас может быть вспомогательная функция для запроса UPDATE:
И используйте это как:
Хотя и в этих вспомогательных функциях вам также нужно передать имя полей, которые вы хотите вставить или обновить, но, по крайней мере, у вас есть полный контроль над запросом, и вы также можете включать различные предложения WHERE по мере необходимости.
С помощью этих вспомогательных функций вы сохраните следующие строки кода:
Для вставки запроса:
Для запроса на обновление:
Кажется, есть разница в несколько строк кода, но когда дело доходит до выполнения операции вставки или обновления таблицы, содержащей более 10 полей, можно почувствовать разницу.
Вы можете использовать оператор nameof для передачи имени поля в функции, чтобы избежать опечаток
Вместо того:
Ты можешь написать:
источник