鉴于我们已将DbUp设置为查看我们的本地文件系统设置如下
DeployChanges.To
.SqlDatabase(ConnectionString)
.WithTransactionPerScript()
.WithScriptsFromFileSystem(ScriptsPath)
.LogToConsole()
.Build()
.PerformUpgrade();
是否有处理程序或机制来处理单个升级脚本文件中的错误?我目前的情况是有人编写了一个糟糕的脚本文件(稍后会在后续脚本中修复),如果出现错误则需要忽略。
我无法在文档中的任何地方找到我可以添加某种逻辑(不仅仅是)继续出错但是尝试添加一些智能来围绕是否可以跳过脚本,因为它编写得很糟糕(例如,创建表而不检查它是否已经存在)。
答案 0 :(得分:1)
在DbUp模型中,调整脚本执行中的问题所需的逻辑应该驻留在脚本本身内,而不是驻留在执行代码中。
例如,如果您担心添加列脚本可能因列已存在而失败,则应将该命令包装在if语句中。同上一个drop column语句或其他模式修改内容。
如果您正在寻找一个通用的回滚处理程序,那么就没有。您可以查看在事务中执行一系列脚本,但这有其自身的问题。
答案 1 :(得分:0)
这可能取决于情况,但是您可以编写一个“运行一次”脚本,该脚本在来自文件的脚本之前发生。看起来像这样:
DeployChanges.To
.SqlDatabase(ConnectionString)
.WithTransactionPerScript()
.WithScripts(scriptsHere) // there are a number of ways to provide custom code scripts
.WithScriptsFromFileSystem(ScriptsPath)
.LogToConsole()
.Build()
.PerformUpgrade();
我喜欢实现一个在IScriptProvider
命名空间中扩展DbUp.Engine
的类。这很简单。
现在,使用这种方法,您可以确保它可以在其他脚本之前运行,和您可以通过a的构造函数RunOnce
或RunAlways
SqlScript
个对象。