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