持续集成 – 实体框架4.3.1 Migrate.exe非零退出代码

我们正在使用Entity Framework 4.3.1的migrate.exe工具从我们的TeamCity构建服务器运行数据库迁移,这是我们持续集成和部署自动化的一部分.我们遇到的其中一个问题是migrate.exe工具在失败时不会发出非零退出代码:

C:\<path>\packages\EntityFramework.4.3.1\tools>migrate.exe AppContext /startupdirectory:C:\<path>\bin\Debug /startupconfigurationfile:C:\<path>\Web.config /verbose
<Bunch of successful migrations>
Applying explicit migration: 201202212004585_UpdateTable
VERBOSE: ALTER TABLE [TableA] DROP CONSTRAINT [FK_TableA_TableB]
System.Data.Entity.Migrations.Design.ToolingException: 'FK_TableA_TableB' is not a constraint.
Could not drop constraint. See previous errors.
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMig
ration, Boolean force)
   at System.Data.Entity.Migrations.Console.Program.Run()
   at System.Data.Entity.Migrations.Console.Program.Main(String[] args)
ERROR: 'FK_TableA_TableB' is not a constraint.
Could not drop constraint. See previous errors.

C:\<path>\packages\EntityFramework.4.3.1\tools>echo %errorlevel%
0

这导致Team City在迁移失败时将构建作为“成功”传递,并且应该失败.

我们的临时解决方法是将构建日志grep为“ERROR:”,并在发生这种情况时使构建失败,但这个解决方案很粗糙,我们无法判断EF是否失败或其他具有类似日志条目的进程.

有什么建议可以更好地解决问题吗?要么使migrate.exe运行,要么让Team City了解该故障是特定于migrate.exe的.

最佳答案
http://blogs.msdn.com/b/adonet/archive/2012/05/15/ef5-release-candidate-available-on-nuget.aspx

此版本还包含针对Beta 2中发现的以下错误的修复程序:

> ……
>迁移:Migrate.exe在失败后不会设置错误代码

点赞