【问题标题】:Entity Framework Migrations Integration Tests实体框架迁移集成测试
【发布时间】:2014-09-15 20:10:39
【问题描述】:

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

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

首先使用 EF 迁移代码是否可行?

【问题讨论】:

  • 您是在问如何升级到特定迁移?
  • 是的,我想升级到特定版本,然后对模型进行一些测试。然后可能会升级到更新版本并继续进行一些测试。等等……

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


【解决方案1】:

抱歉,我现在无法访问 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 类的默认构造函数。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    相关资源
    最近更新 更多