手动修改EF Code First Migration步骤而不会产生干扰

时间:2015-10-16 12:16:04

标签: entity-framework ef-migrations

我知道我们无法手动更新DbMigration方法中的代码,因为这会导致我们在下一个DbMigration步骤中出现不一致的状态。

因此,例如,如果我在下面的DBMigration步骤的代码中将nullable: false更改为nullable: true(同时在实体类中执行相同的修改),这肯定会带来问题。正确的方法是在实体类中应用修改 ,并在Package Manager ConsoleAdd-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");
    }
}

但是使用如下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步骤吗?

  • 您是否确认我只能做不修改实体模型的事情?

感谢。

1 个答案:

答案 0 :(得分:1)

更改已应用于数据库的迁移不会产生任何影响,因此我假设您希望在针对数据库运行迁移之前更改迁移。如果是这种情况,那么您的问题不是真正的问题:

  1. 如果要更改模型的属性或其他方面,请执行此操作,然后使用-Force开关再次添加相同的迁移,或者删除迁移并再次添加。现在,迁移将与您的模型完全匹配
  2. 如果要添加额外的SQL语句,只需在提及向迁移文件中添加一个或多个Sql(“...”)时执行此操作。改变它们的次数并没有什么区别。
  3. 手动修改迁移文件的唯一问题是,如果必须重新创建迁移,则必须注意不要忘记再次添加手动更改。为了避免这种情况,我所做的是自定义迁移SQL生成,以便我可以在映射文件中指定自定义SQL代码。