我知道我们不能手动更新DbMigration方法中的代码,因为这可能导致我们在下一个DbMigration步骤中处于不一致的状态。
因此,例如,如果我在下面的DBMigration步骤的代码中将nullable: false
更改为nullable: true
(同时在实体类中进行相同的修改),这肯定会产生问题。正确的方法是在实体类中只应用修改,并在Package Manager Console
(Add-Migration
)中添加新的 DBMigration步骤。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");
}
}
但是在DBMigration步骤中使用如下SQL命令:
public partial class UpdateSomeUsers : DbMigration
{
public override void Up()
{
Sql("UPDATE Users SET Remark = 'Blah blah' WHERE UserName like 'ABC'");
}
public override void Down()
{
}
}
我可以修改sql命令中的sql代码而不影响DBMigration步骤吗?
我可以在现有DBMigration步骤中添加更多sql命令而不影响DBMigration步骤吗?
你确认我只能做没有修改实体模型的事情吗?
谢谢。
更改已经应用于DB的迁移不会产生任何影响,因此我假设您希望在对DB运行迁移之前更改迁移。如果是这样,那么你的问题就不是真正的问题:
- 如果你想改变一个属性或模型的另一个方面,这样做,然后用-Force开关再次添加相同的迁移,或者删除迁移并再次添加。现在迁移将很好地匹配您的模型
- 如果您想添加额外的SQL语句,只需像您提到的那样添加一个或多个SQL("…")到迁移文件。更改多少次都没有区别。
手动修改迁移文件的唯一问题是,如果您必须重新创建迁移,您必须小心不要忘记再次添加手动更改。为了避免这种情况,我所做的是自定义迁移SQL生成,这样我就可以在映射文件中指定自定义SQL代码。