[英]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.