实体框架迁移集成测试

时间:2014-09-12 13:49:17

标签: asp.net-mvc entity-framework migration integration-testing

有没有办法为特定版本的迁移编写测试?

让我们说我已经完成了“添加迁移01添加列......” - > “08删除专栏......”。 在我的测试中,我想看看从01到08的每次迁移是如何进行的。 因此,首先,我想将所有迁移运行到版本“01 Added column ...”并在该状态下进行测试。 之后我可能想要将数据库升级到“05 ...”并在那里进行一些测试。 最后,我想要一直升级数据库,并进行一些完成测试。

这首先是EF迁移代码吗?

1 个答案:

答案 0 :(得分:0)

很抱歉,我现在无法访问EF,因此我的代码无法正常运行,但我希望它可以为您提供有关您可以执行的操作的一般指示。

您可以创建自定义数据库初始化程序:

public sealed class MigrationInitializer : IDatabaseInitializer<MyContext>
{
    private readonly string _targetMigration;

    public MigrationInitializer()
    {
    }

    public MigrationInitializer(string targetMigration)
    {
        if (string.IsNullOrEmpty(targetMigration))
        {
            throw new ArgumentException("targetMigration");
        }

        _targetMigration = targetMigration;
    }

    public void InitializeDatabase(MyContext context)
    {
        var migrationsConfiguration = new DbMigrationsConfiguration<MyContext>
        { 
            AutomaticMigrationsEnabled = false 
        };
        var migrator = new DbMigrator(migrationsConfiguration);
        if (_targetMigration == null)
        {
            migrator.Update();  
        }
        else
        {
            migrator.Update(_targetMigration);
        }
    }
}

然后强制EF在你的测试中使用它:

System.Data.Entity.Database.SetInitializer<MyContext>(new MigrationInitializer("MyMigration"));

要将数据库迁移到最新版本,只需使用MigrationInitializer类的默认构造函数。

请注意,您可以使用此方法执行数据库的升级和降级。