Как я могу использовать проверку для обеспечения уникальности свойства в ASP.NET MVC 2? - PullRequest
2 голосов
/ 06 мая 2010

Представьте объект с полем, которое не может иметь повторяющееся значение в базе данных. Моим первым инстинктом было создание уникального атрибута, который я мог бы применить в качестве аннотации данных к свойству. Этот уникальный атрибут попадет в базу данных и проверит, существует ли это значение. Это будет работать при выполнении метода create, но при обновлении произойдет сбой. При обновлении я получу ошибку дублирующегося значения для каждого уникального поля моего объекта, значение которого я не хочу менять. Что может быть хорошим способом или установившейся практикой для достижения этой цели в ASP.NET MVC 2 таким образом, чтобы он прекрасно подходил для ModelState? Передача идентификатора моего объекта в валидатор атрибута может сработать, проверив, имеет ли обнаруженное дублирующее значение ту же сущность, которую я обновляю, но я не знаю, как получить эти данные из валидатора.

Пожалуйста, прости меня, если это глупый вопрос или он сформулирован бессвязно. Уже почти 3 часа утра, а я кодирую с вчерашнего утра.

1 Ответ

2 голосов
/ 06 мая 2010

Для такого рода проверки я бы позволил базе данных делать то, что она уже делает так хорошо. Убедитесь, что ваша база данных имеет уникальное ограничение, и пусть она сообщит об ошибке, если вы нарушите ее. Затем вы можете добавить ошибку к ошибкам модели (с хорошим дружелюбным текстом, вместо того, чтобы просто добавить ошибку SQL).

Если вы решили выполнить проверку самостоятельно, вы можете обойти проблему ОБНОВЛЕНИЕ, исключив текущую запись ...

SELECT COUNT(*)
FROM myTable
WHERE myTable.UniqueValue = 'ShouldBeUnique'
AND myTable.Id <> 5

В этом примере вы используете идентификатор обновляемой записи, чтобы не проверять ее, а это означает, что вы просто проверяете другие записи, чтобы узнать, содержат ли они уникальное значение.

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