Рельсы имеют очень удобную проверку подлинности.Проверка подлинности ASP.NET MVC
ASP.NET MVC нет.
Мне нужно убедиться, что адрес электронной почты, который пользователь ввел, еще не зарегистрирован кем-либо еще.
Я вижу только один способ сделать такую проверку: создать новый объект контекста данных в классе UniqueAttribute.
Но я боюсь, что тратить память на новый объект контекста данных только для одной проверки является опасным.
Я не прав? Есть ли лучший способ сделать это?
Update
Это то, что я до сих пор
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 в хранилище пользователей. Отлично работает и, вероятно, более эффективен, чем поиск одного и того же узла во всей таблице. Благодаря!
Rails vs ASP.NET MVC похож на сравнение яблок с апельсинами, они не одно и то же. ASP.NET MVC не имеет формального уровня сохранения данных, вам нужно выбрать один из множества, и бороться с этим – TFD 2010-11-28 20:36:27
@TFD, это хороший момент. Я согласен, что нет слоя данных, поэтому DataContext нужно где-то хранить, вот о чем мой вопрос. – Alex 2010-11-28 20:39:01
1] По умолчанию имя свойства, к которому применяется атрибут, отправляется методу действия в качестве параметра строки запроса. – swapneel 2010-11-28 20:58:12