gpt4 book ai didi

entity-framework - 在我在迁移过程中删除它们之前,从另一列填充一个新列

转载 作者:行者123 更新时间:2023-12-01 13:43:17 25 4
gpt4 key购买 nike

我正在使用 Entity Framework - Code First。数据库已经填满。我必须向表中添加一个列并删除另外两个列。新列将填充旧列的合并。我正在尝试使用迁移和种子方法。

我继续我的任务:

  1. 在表格中添加一列;
  2. 用其他两列的数据填充新列;
  3. 删除其他两列。

这里是我的迁移:

public partial class MyNewMigration : DbMigration
{
public override void Up()
{
AddColumn("customers.myTable", "newCol", c => c.String());
DropColumn("customers.myTable", "oldCol1");
DropColumn("customers.myTable", "oldCol2");
}

public override void Down()
{
AddColumn("customers.myTable", "oldCol1", c => c.String());
AddColumn("customers.myTable", "oldCol2", c => c.String());
DropColumn("customers.myTable", "newCol");
}
}

我是否必须在 Up 方法中添加代码来填充新列?

最佳答案

Do I must add the code to fill the new column inside the Up method?

是的,您需要转换数据!在复杂的数据转换中,您可能需要 Sql 函数或存储过程。

例如,您可以在迁移文件中执行以下操作:

AddColumn("customers.myTable", "newCol", c => c.String());
Sql("UPDATE customers.myTable SET newCol= ''");

Sql("Update customers.myTable SET newCol = oldCol1+ oldCol2");

正如我之前提到的,如果您需要复杂的数据转换,您必须使用带有输入/输出参数的存储过程或函数,并且您必须先添加它们,然后才能通过 Sql 命令使用它们。

您也可以使用迁移种子。种子方法在每个迁移级别之间调用,例如,如果您有迁移级别 1、2、3,那么它将被调用 3 次。 seed 方法的问题是,您必须在一个文件中为所有迁移级别构建迁移逻辑。您可以使用 switch case 或 if else 然后检查您处于哪个级别。如果您处于级别 1,则可以添加迁移级别 1 的代码逻辑,如果您处于级别 2,则必须添加级别 2 等的代码。这个方法对我来说并不干净,如果你想使用它,那么将它与工厂模式一起使用,允许为每个迁移级别 (SRP) 分配代码。两种方法都做同样的事情,这取决于您。

关于entity-framework - 在我在迁移过程中删除它们之前,从另一列填充一个新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38077001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com