C# 我应该使用什么方法通知用户电子邮件已被使用

C# 我应该使用什么方法通知用户电子邮件已被使用,c#,sql-server,validation,razor-pages,asp.net-core-5.0,C#,Sql Server,Validation,Razor Pages,Asp.net Core 5.0,我正在使用razor页面构建一个.NETAPI,我想在创建过程中验证电子邮件输入,这样就不会将重复的电子邮件存储到数据库中。我在数据库设计中使用了唯一的参数,但没有带来什么成功。这是我当前使用razor pages(CRUD)构建的用户类 所以我在我的SQL数据库中尝试了这样的唯一属性 CREATE TABLE [dbo].[User] ( [ID] INT IDENTITY (1, 1) NOT NULL, [Name] NVA

我正在使用razor页面构建一个.NETAPI,我想在创建过程中验证电子邮件输入,这样就不会将重复的电子邮件存储到数据库中。我在数据库设计中使用了唯一的参数,但没有带来什么成功。这是我当前使用razor pages(CRUD)构建的用户类

所以我在我的SQL数据库中尝试了这样的唯一属性

CREATE TABLE [dbo].[User] (
[ID]             INT            IDENTITY (1, 1) NOT NULL,
[Name]           NVARCHAR (20)  NOT NULL,
[Email]          NVARCHAR (50) NOT NULL UNIQUE,
[DateOfBirth]    DATETIME2 (7)  NOT NULL,
[AdditionalInfo] NVARCHAR (100) NULL,
[Password]       NVARCHAR (28) NOT NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED ([ID] ASC));

在这种情况下,检查电子邮件是否已被使用的最佳做法是什么?

查询数据库中的候选电子邮件地址,看看是否能返回记录。
UNIQUE
有效。它确保数据库中不会有任何重复条目。但这不会在输入前自动检查数据。当我们已经将数据类型定义为EMailAddress时,我们真的需要一个RegularExpression注释吗?不要重新发明轮子(很糟糕)。永远不要存储密码。安全性很难,如果你不自己写的话,这是最容易的。不要将您的数据库实体用作视图模型(即使“脚手架就是这样工作的”)。@PanagiotisKanavos这就是问题所在,我使用完全相同的信息插入数据,但它仍然只使用不同的ID将数据写入数据库。
CREATE TABLE [dbo].[User] (
[ID]             INT            IDENTITY (1, 1) NOT NULL,
[Name]           NVARCHAR (20)  NOT NULL,
[Email]          NVARCHAR (50) NOT NULL UNIQUE,
[DateOfBirth]    DATETIME2 (7)  NOT NULL,
[AdditionalInfo] NVARCHAR (100) NULL,
[Password]       NVARCHAR (28) NOT NULL,
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED ([ID] ASC));