Проверка наличия элемента перед сохранением - PullRequest
1 голос
/ 02 февраля 2011

У меня есть база данных SQL с различными таблицами, в которой хранится информация о продукте (для интернет-магазина), и я пишу код на C #. Существуют параметры, связанные с данным продуктом, и, как уже упоминалось, записанная информация об этих параметрах распределяется по нескольким таблицам при сохранении.

Теперь, когда я прихожу, чтобы отредактировать этот продукт в CMS, я вижу список существующих вариантов продукта, и я могу добавить в этот список или удалить из него, как вы ожидаете.

Когда я сохраняю продукт, мне нужно проверить, существует ли запись, и если да, обновить ее, если нет, сохранить новую запись. Я пытаюсь найти эффективный способ сделать это. Очень важно, чтобы я сохранил идентификаторы, связанные с опциями продукта, поэтому, к сожалению, каждый раз их очищаю и заново сохраняю.

Чтобы описать еще раз, возможно, более четко: представьте, у меня есть набор опций, когда я загружаю продукт, он загружается в память и добавляется / удаляется в зависимости от того, что выберет пользователь. Когда они нажимают «Сохранить», мне нужно проверить, какие опции являются обновлениями, а какие - новыми в списке.

Какие-нибудь предложения относительно эффективного способа сделать это?

Спасибо.

Ответы [ 3 ]

1 голос
/ 02 февраля 2011

Я обычно делаю это, выполняя следующее:

  1. Для каждого элемента выполните запрос на обновление, который обновит элемент, если он существует.
  2. После каждого обновления проверяйте, сколько строк было обновлено (используя @@ ROWCOUNT в SQL Server). Если нулевые строки были обновлены, выполните вставку для создания строки.

В качестве альтернативы, вы можете сделать наоборот, если вы создадите уникальное ограничение, которое предотвращает дублирование строк:

  1. Для каждого элемента попробуйте вставить его.
  2. Если вставка не удалась из-за ограничения (проверьте код ошибки), вместо этого выполните обновление.
1 голос
/ 02 февраля 2011

Если эффективность, к которой вы стремитесь, зависит от количества обращений к базе данных, вы можете написать хранимую процедуру, чтобы выполнить обновление или вставку для вас.

Однако в большинстве случаев нет необходимости сначала избегать SELECT, при условии, что у вас есть соответствующие первичные ключи или уникальные индексы в ваших таблицах, это должно быть очень быстро.

Если эффективность с точки зрения элегантного или сокращенного кода на стороне сервера, то я бы посмотрел на использование какого-либо ORM, например Entity Framework 4.0. При правильной архитектуре ORM вы можете почти перестать думать о записях базы данных и INSERT / UPDATE и просто работать с коллекцией объектов в памяти.

0 голосов
/ 02 февраля 2011

Запустите проверку запроса выбора для идентификатора.Если он существует, вам нужно обновить.Если он не существует, вам нужно вставить.

Без дополнительных подробностей я не совсем уверен, что еще вам сказать.Это довольно стандартно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...