1

鉴于我们已将 DbUp 设置为查看我们的本地文件系统设置如下

DeployChanges.To
    .SqlDatabase(ConnectionString)
    .WithTransactionPerScript()
    .WithScriptsFromFileSystem(ScriptsPath)
    .LogToConsole()
    .Build()
    .PerformUpgrade();

是否有处理单个升级脚本文件中的错误的处理程序或机制?我目前的情况是有人编写了一个错误的脚本文件(稍后在后续脚本中修复),如果出现错误需要忽略。

我在文档中找不到任何可以添加某种逻辑的地方(不仅仅是)继续出错,而是尝试添加一些聪明的方法来解决是否可以跳过脚本,因为它写得不好(例如创建表而不检查如果它已经存在)。

4

2 回答 2

1

在 DbUp 模型中,针对脚本执行中的问题进行调整所需的逻辑应该驻留在脚本本身中,而不是在执行代码中。

例如,如果您担心添加列脚本可能会因为列已经存在而失败,您应该将命令包装在 if 语句中。同上删除列语句或其他模式修改内容。

如果您正在寻找一个通用的回滚处理程序,那么没有。您可以查看在事务中执行一系列脚本,但这有其自身的问题。

于 2018-01-30T05:16:21.923 回答
0

这可能取决于具体情况,但您可以编写一个“运行一次”脚本,该脚本发生在来自文件的脚本之前。它看起来像这样:

DeployChanges.To
    .SqlDatabase(ConnectionString)
    .WithTransactionPerScript()
    .WithScripts(scriptsHere) // there are a number of ways to provide custom code scripts
    .WithScriptsFromFileSystem(ScriptsPath)
    .LogToConsole()
    .Build()
    .PerformUpgrade();

我喜欢实现一个IScriptProviderDbUp.Engine命名空间中扩展的类。这很简单。

现在,使用这种方法,您可以确保它在您的其他脚本之前运行,并且您可以通过对象的构造函数RunOnceRunAlways通过SqlScript对象的构造函数来运行。

于 2019-11-08T02:47:54.223 回答