asp.net-mvc – ASP.NET MVC验证的唯一性

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.工作很好,可能比在整个表中搜索一个节点效率更高.谢谢!

解决方法

这样做的一个愚蠢的方法是创建一个验证属性,该属性查询数据库的电子邮件地址.这肯定会增加延迟.

一个替代方法是在表上创建一个唯一的约束并拦截sqlException.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....