数据库中已经有一个名为 'AspNetRoles' 的对象。在 asp.net 核心 3.1 中

There is already an object named 'AspNetRoles' in the database. in asp.net core 3.1

原来我想执行迁移,但我不想丢失数据库中的数据,在尝试更新我的数据库时收到以下错误:

应该说我用的是asp.net core 3.1

There is already an object named 'AspNetRoles' in the database.

如问题消息所述,当您通过 EF 核心更新数据库时,数据库中已经有一个名为 'AspNetRoles' 的对象。

要解决此问题,您可以在创建所有授权表的迁移中注释Up方法的内容。像这样:

 public partial class initial : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            //migrationBuilder.CreateTable(
            //    name: "AspNetRoles",
            //    columns: table => new
            //    {
            //        Id = table.Column<string>(nullable: false),
            //        ConcurrencyStamp = table.Column<string>(nullable: true),
            //        Name = table.Column<string>(maxLength: 256, nullable: true),
            //        NormalizedName = table.Column<string>(maxLength: 256, nullable: true)
            //    },
            //    constraints: table =>
            //    {
            //        table.PrimaryKey("PK_AspNetRoles", x => x.Id);
            //    });
            //
            //    ... Other Identity tables, sucn as AspNetUsers, AspNetUserRoles.
        }
    }

此外,如果您在使用 Fluent API 配置时遇到此问题,您可以尝试在 OnModelCreating 方法中添加 base.OnModelCreating(builder);,像这样(将 ApplicationDbContext 更改为您的):

public class ApplicationDbContext : IdentityDbContext
{ 
    public DbSet<ApplicationUser> ApplicationUsers { get; set; } 
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        //Fluent API Configurations
    }
}