【C#】在 .NET Identity 中的用户表中添加新字段
假定在HD_Users中添加新字段FullName。注意如何将原AspNetUsers改成HD_Users,请查看【C#】修改 .NET Identity 中的表名和字段名
http://wh.ac.cn/forum.php?mod=viewthread&tid=3156&fromuid=1
这儿代码也重复了实现过程,在此基础上添加新字段。
public class HondyChatContext : IdentityDbContext<HondyChatUser>
{
public HondyChatContext(DbContextOptions<HondyChatContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
//修改原表前缀AspNet为HD_
builder.Entity<IdentityRoleClaim<string>>().ToTable("HD_RoleClaims");
builder.Entity<IdentityRole>().ToTable("HD_Roles");
builder.Entity<IdentityUserClaim<string>>().ToTable("HD_UserClaims");
builder.Entity<IdentityUserLogin<string>>().ToTable("HD_UserLogins");
builder.Entity<IdentityUserRole<string>>().ToTable("HD_UserRoles");
builder.Entity<IdentityUserToken<string>>().ToTable("HD_UserTokens");
builder.Entity<HondyChatUser>().ToTable("HD_Users");
//添加默认不存在新的自定义字段,这儿是重点哟!
builder.Entity<HondyChatUser>().Property(u => u.FullName).HasMaxLength(100);
//其它字段
}
}
//这儿定义FullName
public class HondyChatUser : IdentityUser
{
public string? FullName { get; set; }
//其它字段
}
以上是对数据库结绝迁移的操作,请勿操作人工操作数据库的前提下,保证迁移结构完整的代码。
下面是生成数据库的数据
1、dotnet ef migrations add HondyChat
上面会生成一个20231212132220_HondyChat.cs,注意如果文件表已经存在,可能生成错误,删除原来的即可,也可以修改成任何其它名,比如InitialCreate
2、dotnet ef database update
更新到数据库实例中,让数据库的表字段得到更正。
代码实现数据库与表单的相互响应
在.cshtml文件的表单中,添加:<div class="form-floating mb-3">
<input asp-for="Input.FullName" class="form-control" placeholder="Please enter your full name." />
<label asp-for="Input.FullName" class="form-label"></label>
<span asp-validation-for="Input.FullName" class="text-danger"></span>
</div>
在.cshtml.cs代码段中,找到LoadAsync
private async Task LoadAsync(HondyChatUser user)
{
var userName = await _userManager.GetUserNameAsync(user);
var phoneNumber = await _userManager.GetPhoneNumberAsync(user);
var fullName = user.FullName; // 从用户实体中获取 FullName 值
Username = userName;
Input = new InputModel
{
PhoneNumber = phoneNumber,
FullName=fullName
};
}
找到OnPostAsync()
public async Task<IActionResult> OnPostAsync()
{
var user = await _userManager.GetUserAsync(User);
if (user == null)
{
return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
}
if (!ModelState.IsValid)
{
await LoadAsync(user);
return Page();
}
var phoneNumber = await _userManager.GetPhoneNumberAsync(user);
if (Input.PhoneNumber != phoneNumber)
{
var setPhoneResult = await _userManager.SetPhoneNumberAsync(user, Input.PhoneNumber);
if (!setPhoneResult.Succeeded)
{
StatusMessage = "Unexpected error when trying to set phone number.";
return RedirectToPage();
}
}
// 添加处理 FullName 的逻辑
if (Input.FullName != user.FullName)
{
user.FullName = Input.FullName;
var setResult = await _userManager.UpdateAsync(user);
if (!setResult.Succeeded)
{
StatusMessage = "Unexpected error when trying to set full name.";
return RedirectToPage();
}
}
await _signInManager.RefreshSignInAsync(user);
StatusMessage = "Your profile has been updated";
return RedirectToPage();
}
以上红色部分即是对FullName与数据库响应的代码,在实例HondyChat-->Areas-->Identity-->Account-->Manage-->Index.cshml中通过。
页:
[1]