有没有办法为特定版本的迁移编写测试?
让我们说我已经完成了“添加迁移01添加列......” - > “08删除专栏......”。 在我的测试中,我想看看从01到08的每次迁移是如何进行的。 因此,首先,我想将所有迁移运行到版本“01 Added column ...”并在该状态下进行测试。 之后我可能想要将数据库升级到“05 ...”并在那里进行一些测试。 最后,我想要一直升级数据库,并进行一些完成测试。
这首先是EF迁移代码吗?
答案 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
类的默认构造函数。
请注意,您可以使用此方法执行数据库的升级和降级。