可能我错过了一些非常明显的事情。但我还没有找到一种方法在EF Core中为现有的表/模型添加新列。
这是我关注的文档:https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell
这就是我到目前为止所做的:
那么如何更新已存在的表格表呢? 我能想到的两种方式是:
但我觉得应该有更好的方法来做到这一点。
答案 0 :(得分:2)
这就是我解决问题的方法。不确定它是否是完美的方式。
密钥不是在创建新迁移之前删除初始迁移。
在此添加步骤:
答案 1 :(得分:1)
我在使用EF Core和存在一些模型充实的现有数据库时遇到了类似的问题,但是我正在添加一个新模型(已经有一个表)并出现错误
There is already an object named 'tableN' in the database.
我将其用于现有数据库的方式是:
答案 2 :(得分:0)
这是一种帮助我在不丢失数据的情况下向现有数据库添加新列的方法:
我已将此命令写入到包含我的模型的项目的Package Manager控制台中
add-migration MyFirstMigration
上面的命令创建了一个包含大量代码的类:
public partial class MyFirstMigration : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
...
// The code is omitted for the brevity
...
}
}
我已经删除了所有生成的代码,并将以下代码段添加到上述方法Up(MigrationBuilder migrationBuilder)
中:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>("Password", "Users", "varchar(255)",
unicode:false, maxLength: 255, nullable: true);
}
然后必须将以下命令写入Package Manager控制台以在数据库中添加一列:
Update-Database
答案 3 :(得分:0)
我有点混合了@Boney和@StepUp的建议,并且运行顺利。这就是我所做的。假设有一个表Period,我决定添加其他列PeriodTypeId。
let a=[[1,2],[4,5],[7,8]]
let isContain = (arr) => arr.some(e=> e==''+[4,5]);
console.log( isContain(a) );
这创建了一个新的迁移文件,名称为:OVCDbMigrationsUpdated。
Add-Migration -Name OVCDbMigrationsUpdated -Context DbContext
我的数据库已使用新列成功更新。
答案 4 :(得分:0)
如果我们从解决方案中排除以前的迁移,然后运行 update-database cmd,Update-Database 将起作用。但是,我们可以再次包含数据库定义。 直接在EF核心+ postgresql的情况下是行不通的。