在上一篇 從頭開始使用 ASP.NET Core 自訂身分驗證功能 建立完專案並能夠使用登入功能後,已經在 SqlLocalDB 中建立資料庫了,連進資料庫後發現預設資料表如下:
總共會自動產生 7 張資料表,所有資料表如下:AspNetRoles, AspNetRoleClaims, AspNetUsers, AspNetUserClaims, AspNetUserLogins, AspNetUserRoles, AspNetUserTokens
所有資料表都以 AspNet 開頭,未來增加其他資料表時很可能不會前面加上 AspNet,但這樣會和我們命名規則不一致,那要如何自訂 ASP.NET Core 的使用者身分驗證資料表呢?
最簡單的方式就是在 ApplicationDbContext.cs 裡面複寫 OnModelCreating 方法,就可以很簡單的自訂資料表名稱,也可以調整欄位名稱和忽略(隱藏)沒有使用到的欄位
註:資料庫中的資料表內容無法自動更新,需要手動調整欄位。 這樣的方式適合已經建立好的資料庫,只要設定好既有的欄位即可。 如果覺得這樣不是很方便,還有其他更好的方式,就是自訂身分模型,不過就要等下次再介紹了
參考資料:
Change table/column names and facets
總共會自動產生 7 張資料表,所有資料表如下:AspNetRoles, AspNetRoleClaims, AspNetUsers, AspNetUserClaims, AspNetUserLogins, AspNetUserRoles, AspNetUserTokens
所有資料表都以 AspNet 開頭,未來增加其他資料表時很可能不會前面加上 AspNet,但這樣會和我們命名規則不一致,那要如何自訂 ASP.NET Core 的使用者身分驗證資料表呢?
最簡單的方式就是在 ApplicationDbContext.cs 裡面複寫 OnModelCreating 方法,就可以很簡單的自訂資料表名稱,也可以調整欄位名稱和忽略(隱藏)沒有使用到的欄位
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
// 將 AspNetUsers 資料表名稱改為 users
builder.Entity<IdentityUser>().ToTable("users", "dbo");
// 忽略 AspNetUsers 資料表的 PhoneNumber 和 PhoneNumberConfirmed 欄位
builder.Entity<IdentityUser>()
.Ignore(p => p.PhoneNumber)
.Ignore(p => p.PhoneNumberConfirmed);
// 將 AspNetUsers 的 Id 欄位改名為 user_id
builder.Entity<IdentityUser>().Property(p => p.Id).HasColumnName("user_id");
base.OnModelCreating(builder);
}
}
註:資料庫中的資料表內容無法自動更新,需要手動調整欄位。 這樣的方式適合已經建立好的資料庫,只要設定好既有的欄位即可。 如果覺得這樣不是很方便,還有其他更好的方式,就是自訂身分模型,不過就要等下次再介紹了
參考資料:
Change table/column names and facets
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com