Rails имеет очень удобную проверку уникальности.
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, а не отдельные классы для электронной почты, имен пользователей и т. Д. Как я могу это сделать?
Создание нового контекста данных каждый раз, когда вам нужно проверить один атрибут.
РЕШЕНИЕ
Итак, вконец Я создал уникальное ограничение для таблицы, и теперь мне просто нужно перехватить SqlException в репозитории Users.Прекрасно работает и, вероятно, более эффективен, чем поиск одного и того же узла во всей таблице.Спасибо!