gpt4 book ai didi

entity-framework - Entity Framework 迁移 - 如何创建单元测试以确保迁移模型是最新的?

转载 作者:行者123 更新时间:2023-12-04 04:59:43 24 4
gpt4 key购买 nike

我正在使用与 TeamCity、NUnit 和 Git 的持续集成。我最近从 FluentMigrator 迁移(原谅双关语)到 Entity Framework 迁移。我这样做主要是为了利用其中的脚手架功能。

但是,有可能在不首先将更改搭建到迁移中的情况下 checkin 对源代码控制的某些更改(想象一下在提交和推送提交之前应用程序没有运行的场景)。我正在使用 pre-tested commit workflow ,所以我想在预测试中检测这个问题,而不是等到调用 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();
}
}

但是当有待处理的迁移时,这总是会失败(而不仅仅是在迁移模型与上下文模型不同步的情况下,这就是我所追求的)。

更新

我添加了一个 work item关于这个问题的 EntityFramework 项目。希望他们会考虑添加一种方法来做到这一点。

最佳答案

下面是一些代码,用于检查所有模型更改是否已被构建到迁移中。

bool HasPendingModelChanges()
{
// NOTE: Using MigratorScriptingDecorator so changes won't be made to the database
var migrationsConfiguration = new Migrations.Configuration();
var migrator = new DbMigrator(migrationsConfiguration);
var scriptingMigrator = new MigratorScriptingDecorator(migrator);

try
{
// NOTE: Using InitialDatabase so history won't be read from the database
scriptingMigrator.ScriptUpdate(DbMigrator.InitialDatabase, null);
}
catch (AutomaticMigrationsDisabledException)
{
return true;
}

return false;
}

关于entity-framework - Entity Framework 迁移 - 如何创建单元测试以确保迁移模型是最新的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19284455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com