entity-framework-core - 数据库中已经有一个名为“AspNetRoles”的对象。尝试添加迁移
问题描述
我读过类似的帖子,他们建议删除迁移文件夹并删除数据库。问题是,这是一个生产数据库。很难相信您必须删除并重新填充生产数据库才能进行更改。
所以我有一个应用程序,面向 Core 3.1 的 Asp.Net MVC,名为 CompanyPortal.Web 我还有一个名为 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; }
}
}
使用命令时出现错误: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
另一个信息。此解决方案包含两个 Web 应用程序:CompanyPortal.Web 和 CustomerPortal.Web 它还包含两个类库,一个用于每个身份层:CompanyIdentity.DAL 和 CustomerIdentity.DAL 不确定我是否应该在更新数据库中指定更多内容因为那个命令。
解决方案
事实证明,整个解决方案在某个时候被完全重写,并且保留了旧数据库。__EFMigrationsHistory
表 中的记录MigrationId
与项目的 Migrations 文件夹中的文件名不匹配。由于有一条记录,即初始迁移记录,我删除了该记录,然后插入了一条正确的记录MigrationId
和ProductVersion
.
推荐阅读
- javascript - 当我点击它时如何更改标签颜色并且在我更改我的 URL 之前它不会改变
- assembly - NASM 中是否存在未对齐的访问问题?
- python - Flask/ SQLAchemy 如何从 SQLAchemy 数据库中模拟值
- reactjs - react-google maps 车辆实时跟踪
- python - REST API:如何在 python 循环中从(JSON)文件中发布多个条目?
- python - 关于 tkinter 和套接字/线程的理解问题
- xamarin.forms - 为什么执行不等待等待?
- python - VSCode Intellisense 停止为 python 正常工作
- vuejs3 - 什么是 vite(用于 Vue3)websocket 路径?
- python - 如何使列表元组元素周围的括号在标准输出中消失