Проверка уникального значения: до или после обновления до уровня сохраняемости?

#asp.net-mvc-2 #validates-uniqueness-of

#asp.net-mvc-2 #проверяет уникальность

Вопрос:

Мне интересно, какой наилучший метод проверки уникальности значения поля просмотра в наборе объектов: до или после обновления до уровня сохраняемости? Задействованное поле db имеет уникальное ограничение, и его таблица сопоставлена с моделью EF. Я вижу два способа проверки уникального значения в entityset:

  1. перед сохранением изменений в БД (во время обновления модели или путем оформления модели пользовательскими примечаниями к данным)
  2. после сохранения изменений в БД (путем обработки в репозитории или контроллере исключения UpdateException, сгенерированного уровнем сохраняемости)

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

При использовании 2-го метода дополнительный выбор не требуется, но трудно определить тип ошибки и поле-нарушитель.

Я бы предпочел метод 2, но проблема с определением, не удалась ли вставка / обновление из-за уникального ограничения, вынуждает меня выбрать метод 1.

Или есть другой способ?

Ответ №1:

Предпочтительный и рекомендуемый способ проверки уникального ограничения — из пользовательского интерфейса с помощью пользовательского атрибута DataAnnotation. с помощью этого метода вам придется написать немного кода, но это то, что делают все сайты для проверки ограничения уникальности. asp.net однако mvc 3 предоставляет RemoteAttribute «из коробки» для проверки ограничения уникальности. я бы рекомендовал использовать первый метод, потому что некоторые крошечные вызовы ajax не окажут заметного влияния на производительность при условии, что вы организовали его надлежащим образом.

Комментарии:

1. Спасибо. Я выберу метод 1. Хотя я выполняю проверку как на стороне клиента, так и на стороне сервера, я буду запускать проверку уникальности только на стороне сервера, без использования ajax-вызовов из javascript.