Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在DbUp中单个升级脚本失败时执行某些操作_C#_Dbup - Fatal编程技术网

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

C# 在DbUp中单个升级脚本失败时执行某些操作,c#,dbup,C#,Dbup,假设我们有DbUp设置来查看本地文件系统设置,如下所示 DeployChanges.To .SqlDatabase(ConnectionString) .WithTransactionPerScript() .WithScriptsFromFileSystem(ScriptsPath) .LogToConsole() .Build() .PerformUpgrade(); 是否有处理程序或机制来处理单个升级脚本文件中的错误?我目前的情况是,有人编

假设我们有DbUp设置来查看本地文件系统设置,如下所示

DeployChanges.To
    .SqlDatabase(ConnectionString)
    .WithTransactionPerScript()
    .WithScriptsFromFileSystem(ScriptsPath)
    .LogToConsole()
    .Build()
    .PerformUpgrade();
是否有处理程序或机制来处理单个升级脚本文件中的错误?我目前的情况是,有人编写了一个错误的脚本文件(稍后在后续脚本中修复),如果出现错误,则需要忽略该文件


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

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

例如,如果您担心add column脚本可能会失败,因为该列已经存在,那么应该将该命令包装在if语句中。与drop column语句或其他模式修改内容相同


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

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

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