无扰动地手动修改 EF Code First 迁移步骤
Manually modifying EF Code First Migration step without perturbations
我知道我们不能在 DbMigration 方法中手动更新代码,因为这会导致我们在下一个 DbMigration 步骤中处于不一致状态。
因此,例如,如果我在下面的 DBMigration 步骤的代码中将 nullable: false
更改为 nullable: true
(同时在实体 class 中进行相同的修改) 这肯定会带来问题。正确的方法是在实体 class 中应用修改 only 并在 Package Manager Console
中添加 new DBMigration 步骤(Add-Migration
).
public partial class AddDisabledOnUser : DbMigration
{
public override void Up()
{
AddColumn("dbo.Users", "Disabledc => c.Boolean(nullable: false));
}
public override void Down()
{
DropColumn("dbo.Users", "Disabled");
}
}
但是使用 SQL 命令的 DBMigration 步骤怎么样:
public partial class UpdateSomeUsers : DbMigration
{
public override void Up()
{
Sql("UPDATE Users SET Remark = 'Blah blah' WHERE UserName like 'ABC'");
}
public override void Down()
{
}
}
我可以在不影响 DBMigration 步骤的情况下修改 SQL 命令中的 sql 代码吗?
我可以在现有 DBMigration 步骤中添加更多 sql 命令而不影响 DBMigration 步骤吗?
你确认我只能做没有修改实体模型的事情吗?
谢谢。
更改已应用于数据库的迁移不会有任何影响,因此我假设您想在 运行 之前更改针对数据库的迁移。如果是这样,那么你的问题就不是真正的问题了:
- 如果您想更改 属性 或模型的另一个方面,请执行此操作,然后使用 -Force 开关再次添加相同的迁移,或者删除迁移并再次添加。现在迁移将很好地匹配您的模型
- 如果您想添加额外的 SQL 语句,只需按照您提到的将一个或多个 Sql("...") 添加到迁移文件中即可。改变多少次都没有关系。
手动修改迁移文件的唯一问题是,如果您必须重新创建迁移,则必须注意不要忘记再次添加手动更改。为避免这种情况,我所做的是自定义迁移 SQL 生成,以便我可以在映射文件中指定我的自定义 SQL 代码。
我知道我们不能在 DbMigration 方法中手动更新代码,因为这会导致我们在下一个 DbMigration 步骤中处于不一致状态。
因此,例如,如果我在下面的 DBMigration 步骤的代码中将 nullable: false
更改为 nullable: true
(同时在实体 class 中进行相同的修改) 这肯定会带来问题。正确的方法是在实体 class 中应用修改 only 并在 Package Manager Console
中添加 new DBMigration 步骤(Add-Migration
).
public partial class AddDisabledOnUser : DbMigration
{
public override void Up()
{
AddColumn("dbo.Users", "Disabledc => c.Boolean(nullable: false));
}
public override void Down()
{
DropColumn("dbo.Users", "Disabled");
}
}
但是使用 SQL 命令的 DBMigration 步骤怎么样:
public partial class UpdateSomeUsers : DbMigration
{
public override void Up()
{
Sql("UPDATE Users SET Remark = 'Blah blah' WHERE UserName like 'ABC'");
}
public override void Down()
{
}
}
我可以在不影响 DBMigration 步骤的情况下修改 SQL 命令中的 sql 代码吗?
我可以在现有 DBMigration 步骤中添加更多 sql 命令而不影响 DBMigration 步骤吗?
你确认我只能做没有修改实体模型的事情吗?
谢谢。
更改已应用于数据库的迁移不会有任何影响,因此我假设您想在 运行 之前更改针对数据库的迁移。如果是这样,那么你的问题就不是真正的问题了:
- 如果您想更改 属性 或模型的另一个方面,请执行此操作,然后使用 -Force 开关再次添加相同的迁移,或者删除迁移并再次添加。现在迁移将很好地匹配您的模型
- 如果您想添加额外的 SQL 语句,只需按照您提到的将一个或多个 Sql("...") 添加到迁移文件中即可。改变多少次都没有关系。
手动修改迁移文件的唯一问题是,如果您必须重新创建迁移,则必须注意不要忘记再次添加手动更改。为避免这种情况,我所做的是自定义迁移 SQL 生成,以便我可以在映射文件中指定我的自定义 SQL 代码。