Лучшее решение для обновлений с Dapper в ASP.NET Core - PullRequest
1 голос
/ 20 июня 2019

Допустим, у нас есть тип Book с десятью свойствами.Этот тип является представлением таблицы в базе данных.

Какое наилучшее решение для обновления такого типа?Я использовал шаблон репозитория, где у меня есть метод обновления, который принимает тип книги и обновляет все ее поля.

Поэтому, когда я хочу обновить книгу, я получаю ее по идентификатору из базы данных, я хочу обновить поля(Я могу обновить 1, 2 или все его поля), а затем вызвать метод Update в репозитории.

Мой друг, напротив, говорит, что мы должны обновлять только те поля, которые мы хотим, поэтому, например, если я хочу только обновитьполе bookTitle Я должен создать метод в репо UpdateTitle и т. д.

Какое лучшее решение?Честно говоря, я вижу один метод в обновлении репо со всеми полями намного лучше, чем несколько методов для обновления некоторых свойств деталей / деталей.

Ответы [ 2 ]

2 голосов
/ 21 июня 2019

Dapper не генерирует запросы для вас. Вы напишите запрос и передадите его Dapper. Dapper не отслеживать ваши типы. Вы следите за изменениями. Dapper просто выполняет то, что вы передали, и отображает результат с вашим типом / poco / entity / class, если это применимо.
Тем не менее, как обновить выбранные поля / столбцы? вопрос выходит за рамки.

Теперь о другом вопросе - какой подход выбрать? Оба упомянутых вами подхода имеют свои плюсы и минусы.

Помните, что ранняя оптимизация является корнем всего зла. Даппер прост; будь проще. Обновите весь тип для начала. Со временем, если вы столкнулись с критическими проблемами производительности И вы уверены, что проблема связана с обновлением всех полей, продолжайте и оптимизируйте запрос (или напишите новый) для обновления выбранных полей.

Это сэкономит вам усилия - поможет улучшить производительность при необходимости - сохранит простоту.

0 голосов
/ 20 июня 2019

Сам Dapper не поддерживает отслеживание объектов базы данных, есть ORM, которые делают это (например, Entity Framework )

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

Если вы просто используете Dapper, я бы порекомендовал Упростите , сохраните весь обновленный объект и рассмотрите возможность изменения этого метода, если у вас есть проблемы с производительностью.

...