![](/img/trans.png)
[英]Entity Framework 6 and Asp.Net Identity UserManager: Multiple DbContext
[英]ASP.NET Core using UserManager or Entity Framework to validate extended form field
我已經按照以下步驟來搭建 Razor 類庫的腳手架: ASP.NET Core 項目中的腳手架標識
我還擴展了我的模型以包含一個名為Office365DomainName
的屬性:
[Required]
[Display(Name = "Office 365 Domain Name")]
public string Office365DomainName { get; set; }
此屬性已包含在所有正確的位置,以確保按照文檔填充我的 SQL 數據庫。
現在,當新用戶嘗試注冊時,我想檢查數據庫以確保Office365DomainName
值不存在。
這是我嘗試過的:
ApplicationDbContext
注入我的Register.cshtml.cs
文件並執行var tenantResult = await _context.Tenant.FindAsync(Input.Office365DomainName);
然而,這給了我一個關於有一個主鍵來查詢的例外。 這是有道理的......但我不知道如果不先查看數據(catch 22),PK會是什么。var foo = await _userManager.GetUserAsync(User);
. 但是,由於還沒有用戶登錄,因此User
不存在。 我似乎無法從 UserManager 中找到滿足我需求的內置方法。 那么一個人如何在不知道主鍵的情況下查詢實體呢? 我想 UserManager 的CreateAsync
方法會執行此檢查以確保其他用戶不存在; 我只是想添加該功能並檢查我添加的字段。
這是我的 startup.cs 相關信息:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
這是我的ApplicationDbContext.cs
:
public class ApplicationDbContext : IdentityDbContext<UserRegistrationExtension>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
我表示表單數據的模型是UserRegistrationExtension
。 我之前的嘗試是在UserRegistrationExtension
類型的ApplicationDbContext.cs
中創建一個Tenant
對象。 完全猜對了,但我覺得我沒有走在正確的軌道上。
基本上我假設我需要在這里某處引用我的UserRegistrationExtension
類型,但我不知道在哪里包含它?
您的第一個問題歸結為使用FindAsync
。 該方法專門通過主鍵進行查詢,因此當您傳遞Office365DomainName
值時,它會嘗試以該值作為主鍵查找記錄,而這顯然不是。 相反,您應該執行以下操作:
await _context.Tenants.SingleOrDefaultAsync(x => x.Office365DomainName == Input.Office365DomainName);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.