C# ASP.NET核心使用UserManager或实体框架验证扩展表单字段
我已按照以下步骤构建Razor类库: 我还扩展了我的模型,包括一个名为C# ASP.NET核心使用UserManager或实体框架验证扩展表单字段,c#,asp.net,entity-framework,asp.net-core,C#,Asp.net,Entity Framework,Asp.net Core,我已按照以下步骤构建Razor类库: 我还扩展了我的模型,包括一个名为Office365DomainName的属性: [Required] [Display(Name = "Office 365 Domain Name")] public string Office365DomainName { get; set; } 此属性包含在所有正确的位置,以确保按照 现在,当新用户尝试注册时,我想检查数据库,以确保Office365DomainName值不存在 以下是我尝试过的
Office365DomainName
的属性:
[Required]
[Display(Name = "Office 365 Domain Name")]
public string Office365DomainName { get; set; }
此属性包含在所有正确的位置,以确保按照
现在,当新用户尝试注册时,我想检查数据库,以确保Office365DomainName
值不存在
以下是我尝试过的:
ApplicationDbContext
注入我的Register.cshtml.cs
文件并执行var tenantResult=wait\u context.Tenant.FindAsync(Input.Office365DomainName)代码>但是,这给了我一个关于有主键进行查询的例外。这是有道理的……但如果不先查看数据,我不知道PK是什么(第22条军规)
var foo=await\u userManager.GetUserAsync(User)代码>。但是,由于还没有用户登录,user
不存在
CreateAsync
方法执行此检查以确保其他用户不存在;我只想添加到该功能上,并检查添加的字段
以下是我的startup.cs相关信息:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
我表示表单中数据的模型是UserRegistrationExtension
。我以前的尝试是在ApplicationDbContext.cs
中创建UserRegistrationExtension
类型的Tenant
对象。我完全猜到了,但我觉得我走错了方向
基本上,我假设我需要在这里的某个地方引用我的
UserRegistrationExtension
类型,但我不知道在哪里包含它 您的第一个问题是使用FindAsync
。该方法专门通过主键进行查询,因此当您传递Office365DomainName
值时,它试图查找一条以该值为主键的记录,但显然不是这样。相反,你应该做如下事情:
await _context.Tenants.SingleOrDefaultAsync(x => x.Office365DomainName == Input.Office365DomainName);
编辑了最后的提问。我在ApplicationDbContext文件中创建了一个
Tenant
对象,但这只给了我编译错误,没有引用.SingleOrDefaultAsync
方法。我必须将我的对象名Tenant
放入ApplicationDbContent.cs
中,如下所示:public DbSet Tenants{get;set;}
。成功了!谢谢
await _context.Tenants.SingleOrDefaultAsync(x => x.Office365DomainName == Input.Office365DomainName);