我正在使用与 TeamCity、NUnit 和 Git 的持续集成。我最近从 FluentMigrator 迁移(请原谅双关语)到实体框架迁移。我这样做主要是为了利用其中的脚手架功能。
但是,有可能在没有首先将更改搭建到迁移中的情况下签入源代码控制的某些更改(想象一下在提交和推送提交之前应用程序没有运行的场景)。我正在使用预测试的提交工作流,所以我想在预测试中检测到这个问题,而不是等到调用 migrate.exe(这在我的工作流中为时已晚并破坏了“绿色存储库”)。
我的问题是,如何创建一个单元/集成测试来检测迁移模型何时与上下文模型不匹配,以便在尝试迁移之前使构建失败?请注意,我希望它与数据库不匹配,并且不希望从测试中访问数据库。
我尝试了这种方法:
[Test]
public void CheckWhetherEntityFrameworkMigrationsContextIsUpToDate()
{
Assert.DoesNotThrow(() =>
{
CallDatabase();
});
}
private void CallDatabase()
{
using (var ctx = new MyContext("SERVER=(local);DATABASE=MyDatabase;Integrated Security=True;"))
{
var tenant = (from t in ctx.Tenant
select t).FirstOrDefault();
}
}
但是,当有待处理的迁移时,这总是会失败(而不仅仅是在迁移模型与上下文模型不同步的情况下,这就是我所追求的)。
更新
针对这个问题,我在 EntityFramework 项目中添加了一个工作项。希望他们会考虑添加一种方法来做到这一点。