AspNetRoles 表有 2 列“Id”和“Name”。我需要添加第三个:“Module(nvarchar(256), null)”。
我在搜索中找到了一些文章,但大多数是几年前的,对我来说有点复杂。我想问是否有一个简单的方法可以使用 EF 来做到这一点?
您可以创建一个继承自 IdentityRole 的自定义类,并在该类中添加您想要的任何属性:
创建自定义类,如下所示:
public class CustomIdentityRole : IdentityRole
{
public string NewColumn { get; set; }
}
运行EF迁移命令生成表模型如下图:
Add-Migration test2
public partial class test2 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "NewColumn",
table: "AspNetRoles",
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "NewColumn",
table: "AspNetRoles");
}
}
Update-Database
是的,有一个非常简单的方法。
尽管已经有一个被接受的答案,但它没有显示如何在 DbContext 中使用它,这就是我决定添加我的答案的原因。
第1步: 创建自定义角色
public class ApplicationRole : IdentityRole
{
public string NewColumn { get; set; }
}
第2步: 使用它
DbContext
// string in <ApplicationUser, ApplicationRole, string> is the Key type
public class ApplicationContext : IdentityDbContext<ApplicationUser, ApplicationRole, string>
{
public ApplicationContext(DbContextOptions<ApplicationContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
}
有关自定义身份模型的更多信息,请查看此 Microsoft Learn 指南: https://learn.microsoft.com/en-us/aspnet/core/security/authentication/customize-identity-model?view=aspnetcore-7.0
ApplicationUser
看起来像这样:
public class ApplicationUser : IdentityUser
{
}
第3步: 打开包管理器控制台并使用以下命令创建新的迁移:
PM> Add-Migration 'Add new column to roles table'
第四步: 使用以下命令将迁移应用到数据库中:
PM> Update-Database
就我而言,这并不像创建自定义类那么简单。生成的迁移是空的。
由于出现错误,我还必须修改 DbContext 类以继承此自定义 IdentityRole,然后更改许多方法以使用新的自定义类。
我的自定义 DBContext 定义:
CustomDbContext(DbContextOptions<KeyDbContext> options) : IdentityDbContext<SiteUser, SiteIdentityRole, string>(options)