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



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

所以我有一个应用程序,Asp。Net MVC的核心3.1,称为CompanyPortal。网状物我还有一个名为CompanyIdentity的类库。DAL-

标识已在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; }
}
}

当我使用命令时,我得到了错误:更新数据库

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

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-

另一点信息。此解决方案包含两个web应用程序:CompanyPortal。Web和CustomerPortal。网状物它还包含两个类库,每个Identity层一个:CompanyIdentity。DAL和客户身份。DAL因此,我不确定是否应该在"更新数据库"命令中指定更多内容。

事实证明,整个解决方案在某个时刻被完全重写,并且保留了旧数据库。__EFMigrationsHistory表中的记录MigrationId与项目的Migrations文件夹中的文件名不匹配。由于有一个记录,即初始迁移记录,我删除了该记录,然后插入了一个具有正确MigrationIdProductVersion的记录。

相关内容

  • 没有找到相关文章

最新更新