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类,而不是针对电子邮件、用户名等单独的类。我该如何做到这一点?
每次需要验证单个属性时都要创建一个新的数据上下文。
解决方案
因此,最终我在表上创建了唯一约束,现在我只需拦截Users存储库中的SqlException即可。效果很好,可能比在整个表中搜索相同节点更有效率。谢谢!