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