有没有一种简单的方法可以在AspNetRoles表中添加列?

问题描述 投票:0回答:3

AspNetRoles 表有 2 列“Id”和“Name”。我需要添加第三个:“Module(nvarchar(256), null)”。

我在搜索中找到了一些文章,但大多数是几年前的,对我来说有点复杂。我想问是否有一个简单的方法可以使用 EF 来做到这一点?

c# visual-studio entity-framework
3个回答
2
投票

您可以创建一个继承自 IdentityRole 的自定义类,并在该类中添加您想要的任何属性:

  1. 创建自定义类,如下所示:

     public class CustomIdentityRole : IdentityRole
        {
            public string NewColumn { get; set; }
    
        }

  2. 运行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");
        }
    }

  1. 运行 EF 更新以添加新列:

Update-Database


1
投票

是的,有一个非常简单的方法。

尽管已经有一个被接受的答案,但它没有显示如何在 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

0
投票

就我而言,这并不像创建自定义类那么简单。生成的迁移是空的。

由于出现错误,我还必须修改 DbContext 类以继承此自定义 IdentityRole,然后更改许多方法以使用新的自定义类。

我的自定义 DBContext 定义:

CustomDbContext(DbContextOptions<KeyDbContext> options) : IdentityDbContext<SiteUser, SiteIdentityRole, string>(options)
© www.soinside.com 2019 - 2024. All rights reserved.