问题如下:
dotnet ef migrations add InitialStructure
创建我的初始数据库结构。dotnet ef database update
创建数据库。数据库已正确创建。dotnet ef migrations add NewColumnMigration
。迁移已生成,但是当我检查NewColumnMigration.cs文件时,可以看到Up()
方法尝试从头开始创建所有表,而不是用新列更改一个表。dotnet ef database update
失败。我在这里做错了什么?我正在将最新的ef核心与.net核心2.1配合使用。我是否应该重写整个Up()
方法并自己更改表?
EDIT1:
这是我的IDesignTimeDbContextFactory类中的内容:
public MyContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<MyContext>();
optionsBuilder.UseNpgsql("Server=localhost;Database=dbname;User Id=dbuser;Password=123;").EnableSensitiveDataLogging();
return new MyContext(optionsBuilder.Options);
}
答案 0 :(得分:1)
可能是我转载了您的问题,原因是:
添加列并调用命令“ Add-Migration AddColumn”后,类ApplicationDbContextModelSnapshot.cs
将被更改,所做的更改将存储在此处。
但是,如果您删除迁移代码“ xxxx_AddColumn.cs”,然后再次运行相同的命令,则会生成奇怪的迁移代码,因为与最新的ApplicationDbContextModelSnapshot.cs
相比,它不知道新更新在哪里,因此您必须先删除此文件中的新更改,然后再运行其他命令。
我尝试了MSSQL和MYSQL,没有相同的问题。但可能是PostgreSQL provider: Npgsql.EntityFrameworkCore.PostgreSQL的错误,您可以将其发布到他们的项目中。
,但请确保对每个组件(包括.NET Core和所有软件包)都使用最新版本。
这是我的示例输出。
public partial class AddFirstNameLastName : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
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");
}
}