C# 实体框架迁移-为现有条目添加具有值的新列

C# 实体框架迁移-为现有条目添加具有值的新列,c#,entity-framework,ef-code-first,entity-framework-migrations,C#,Entity Framework,Ef Code First,Entity Framework Migrations,我首先有一个实体框架代码的应用程序 在表中,我必须添加一列。所以我在模型中添加了它,并创建了一个迁移 但是在迁移过程中,我想更新现有条目并为这个新列添加一个值。此值必须从数据库中获取,并在我的配置表中作为常量字段 但默认值应仅应用于现有条目,而不应用于下一个条目 我如何在我的迁移课上做到这一点 我当前的迁移类: public override void Up() { var theDefaultValue = MyConstants.MyConstantParameterFromData

我首先有一个实体框架代码的应用程序

在表中,我必须添加一列。所以我在模型中添加了它,并创建了一个迁移

但是在迁移过程中,我想更新现有条目并为这个新列添加一个值。此值必须从数据库中获取,并在我的配置表中作为常量字段

但默认值应仅应用于现有条目,而不应用于下一个条目

我如何在我的迁移课上做到这一点

我当前的迁移类:

public override void Up()
{
    var theDefaultValue = MyConstants.MyConstantParameterFromDatabase;
    AddColumn("MySchema.MyTable", "MyNewColumn", c => c.Decimal(nullable: false, precision: 18, scale: 2));
}

编辑:仍在寻找用0值更新所有现有条目的解决方案,但仅在此次迁移之后…

您只需修改Up方法,并在其中包含一条SQL语句来设置现有行中的列值。这将仅在数据库更新时执行,并且更新涉及此特定迁移。因此,在调用更新数据库时,只更新已经存在的行

在AddColumn命令之后添加如下代码,以便在SQL语句运行时,该列在表中已经可用:

Sql("UPDATE dbo.MyTable SET Column = (SELECT val FROM config)");

注意:SELECT val FROM config是一个伪代码,您必须用返回所需值的查询来替换它。

我想在运行更新数据库时,从现有列复制一个值并插入到Postgresql数据库中新引入的列中。所以我在迁移类中编辑了Up函数


然后我运行更新数据库。希望有帮助。

该列应该有一个默认值,例如0.0,因为它不可为null,但您应该修改Seed method.Thx中的现有记录。所以,在Seed方法中,我在DbSet上执行foreach,如果当前值为0,我需要分配一个值。例如,是的,这就是想法。因为在迁移过程中,他在变量theDefaultValue中有一个值,所以他可以这样使用它:Sql@UPDATEdbo.MyTable SET MyNewColumn=+默认值+@AndyRaddatz请,在更改答案之前,我的意思是,除了更正打字错误或更改措辞之外,请重新阅读问题:-此值必须从数据库中获取,在我的配置表中是一个常量字段-
protected override void Up(MigrationBuilder migrationBuilder) {
    migrationBuilder.AddColumn < string > (
    name: "FileName", table: "FavoriteFiles", nullable: false, defaultValue: "");
    migrationBuilder.Sql("UPDATE \"FavoriteFiles\" SET \"FileName\" = SPLIT_PART(\"FilePath\", '/', 7) WHERE \"FilePath\" IS NOT NULL;");
}