我们正在使用 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 将构建传递为“成功”。
我们的临时解决方法是在构建日志中查找“错误:”并在发生这种情况时使构建失败,但这种解决方案很粗糙,我们无法判断 EF 是否失败或其他具有类似日志条目的进程。
有什么更好的解决方法的建议吗?一种使 migrate.exe 正常运行的方法,或者一种让 Team City 了解失败是特定于 migrate.exe 的方法。