数据库中已经有一个名为 '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 文件夹中的文件名不匹配。由于只有一条记录,初始迁移记录,我删除了这条记录,然后插入一条正确的 MigrationId
和 ProductVersion
.
的记录
我读过类似的帖子,他们建议删除迁移文件夹和数据库。问题是,这是一个生产数据库。很难相信您必须删除并重新填充生产数据库才能进行更改。
所以我有一个应用程序,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 文件夹中的文件名不匹配。由于只有一条记录,初始迁移记录,我删除了这条记录,然后插入一条正确的 MigrationId
和 ProductVersion
.