Как я могу предотвратить логические дубликаты с EF Code в первую очередь? - PullRequest
0 голосов
/ 11 ноября 2011

Имеется простой класс, такой как Person, со свойством FirstName, LastName и DOB, а также свойством Id (который является первичным ключом).

Когда я вызываю свое действие create, я хочувыполнить проверку, чтобы определить, соответствуют ли модели, которые я передаю, свойствам FirstName, LastName и DOB какие-либо записи, которые уже существуют.В этом случае я хочу исключить свойство Id, потому что модель, поступающая в приложение, еще не имеет его и будет создавать ложные срабатывания.

В настоящее время я просто использую метод расширения Any, например ...

if (!context.People.Any(x => x.FirstName == model.FirstName && x.LastName == 
model.LastName && x.DOB == model.DOB))

Что, конечно, работает, но совершенно, ну, не элегантно.

Конечно, есть лучший способ?

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

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

0 голосов
/ 11 ноября 2011

Является ли проблема, что вы не хотите видеть вызов Any непосредственно в контроллере, или вам просто не нравится этот вызов вообще?

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

Хотя я не думаю, что этот код плохой.Я просто думаю, что это должна быть проверка.FluentValidation довольно хорош для этого, но DataAnnotations также будет работать.

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