繁体   English   中英

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

[英]Entity framework migration - add new column with a value for existing entries

我有一个Entity Framework Code First的应用程序。

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

但是在迁移期间,我想更新现有条目并为此新列添加值。 该值必须从数据库中获取(我的“配置”表中的常量字段)。

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

我怎么能从我的Migration类中做到这一点?

我目前的迁移类:

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

编辑:仍然在寻找更新所有现有条目(具有0值)的解决方案,但仅在此迁移之后...

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

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

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

注意: (SELECT val FROM config)是伪代码,您必须使用返回所需值的查询替换该伪代码

我想在运行update-database将现有列和插入的值复制到Postgresql数据库中新引入的列。 所以我在Migration类中编辑了Up函数。

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;");
}

然后我运行了Update-Database 希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM