当单个升级脚本在 DbUp 中失败时执行某些操作



假设我们将 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对象的构造函数RunOnceRunAlways

相关内容

  • 没有找到相关文章

最新更新