Рельсы имеют очень удобную проверку единственности.
ASP.NET MVC не делает.
Мне нужно убедиться, что адрес электронной почты, введенный пользователем, еще не зарегистрирован кем-либо.
Я вижу только один способ сделать такую проверку: создать новый объект контекста данных в классе UniqueAttribute.
Но я боюсь, что тратить память на новый объект контекста данных только для одной проверки является опасным.
Неужели я ошибаюсь? Есть ли лучший способ сделать это?
Обновление
Это то, что я получил до сих пор
public class UniqueEmailAttribute : ValidationAttribute {
public override bool IsValid(object value) {
DataContext db = new DataContext();
var userWithTheSameEmail = db.Users.SingleOrDefault(
u => u.Email == (string)value);
return userWithTheSameEmail == null;
}
}
// Usage
[UniqueEmail(ErrorMessage="This e-mail is already registered")]
public string Email { get; set; }
Есть две проблемы.
-
Было бы хорошо иметь только один класс UniqueAttribute, а не отдельные классы для электронной почты, имена пользователей и т.д. Как я могу это сделать?
-
Создание контекста данных new каждый раз, когда вам нужно проверить один атрибут.
Решение
Итак, в итоге я создал уникальное ограничение для таблицы, и теперь мне просто нужно перехватить SqlException в репозитории пользователей. Отлично работает и, вероятно, более эффективен, чем поиск того же node во всей таблице. Спасибо!