数据库中已经有一个名为 'AspNetRoles' 的对象。尝试添加迁移

There is already an object named 'AspNetRoles' in the database. Trying to add migration

我读过类似的帖子,他们建议删除迁移文件夹和数据库。问题是,这是一个生产数据库。很难相信您必须删除并重新填充生产数据库才能进行更改。

所以我有一个应用程序,Asp.Net MVC 针对 Core 3.1,名为 CompanyPortal.Web 我还有一个名为 CompanyIdentity.DAL

的 class 库

在 dll 中设置身份。

我扩展了 IdentityUser:

namespace CompanyIdentity.DAL.Data
{
    public class CompanyPortalUser: IdentityUser
    {
        public string CoreUserId { get; set; }
    }
}

到目前为止只有一个迁移,第一个:20200711193329_InitialDbCreation.cs

我正在尝试更改 CoreUserId 的数据类型并添加几个字段:

namespace CompanyIdentity.DAL.Data
{
    public class CompanyPortalUser: IdentityUser
    {
        public int CoreUserId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

我在使用命令时收到错误:Update-Database

我相信这是与此相关的所有代码:

namespace CompanyIdentity.DAL.Data
{
    public class CompanyIdentityDbContext: IdentityDbContext<CompanyPortalUser>
    {
        public CompanyIdentityDbContext(DbContextOptions<CompanyIdentityDbContext> options): base(options)
        {

        }
    }
}
namespace CompanyIdentity.DAL.Migrations
{
    public partial class AddedToCompanyPortalUser : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AlterColumn<int>(
                name: "CoreUserId",
                table: "AspNetUsers",
                nullable: false,
                oldClrType: typeof(string),
                oldType: "nvarchar(max)",
                oldNullable: true);

            migrationBuilder.AddColumn<string>(
                name: "FirstName",
                table: "AspNetUsers",
                nullable: true);

            migrationBuilder.AddColumn<string>(
                name: "LastName",
                table: "AspNetUsers",
                nullable: true);
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropColumn(
                name: "FirstName",
                table: "AspNetUsers");

            migrationBuilder.DropColumn(
                name: "LastName",
                table: "AspNetUsers");

            migrationBuilder.AlterColumn<string>(
                name: "CoreUserId",
                table: "AspNetUsers",
                type: "nvarchar(max)",
                nullable: true,
                oldClrType: typeof(int));
        }
    }
}

这是来自 Starup.cs ConfigureServices() 的相关位:

            services.AddDbContext<CompanyIdentityDbContext>(config =>
            {
                config.UseSqlServer(_configuration.GetConnectionString("CompanyIdentityDb"));
            });

            services.AddIdentity<CompanyPortalUser, IdentityRole>()
                    .AddDefaultTokenProviders()
                    .AddEntityFrameworkStores<CompanyIdentityDbContext>();

我不明白的是为什么它首先要尝试创建表?它不应该只是尝试执行我的最后一次迁移吗?

我已将 CompanyPortal.Web 设置为启动项目。 我还将包管理器控制台中的默认项目设置为:CompanyIdentity.DAL

又一点信息。此解决方案包含两个网络应用程序:CompanyPortal.Web 和 CustomerPortal.Web 它还包含两个 class 库,每个身份层一个:CompanyIdentity.DAL 和 CustomerIdentity.DAL 不确定我是否应该因此在 Update-Database 命令中指定更多内容。

原来整个解决方案在某个时候被完全重写了,旧的数据库被保留了下来。 __EFMigrationsHistory table、MigrationId 中的记录与项目的 Migrations 文件夹中的文件名不匹配。由于只有一条记录,初始迁移记录,我删除了这条记录,然后插入一条正确的 MigrationIdProductVersion.

的记录