使用 DbUp 执行 C#(过程)迁移



使用 DbUp,是否可以用 C#(而不是 SQL(编写过程迁移?

我意识到 DbUp 的一般理念是在 SQL 中完成所有操作,但在某些情况下,C# 可能是这项工作的更好工具。

例如,假设你在数据库中存储序列化的二进制 blob(忽略这是否是一个好主意(,并且你想要更改这些 blob 的结构。应用程序代码具有反序列化/序列化这些 blob 的专业知识。这样做可以通过 SQL 实现,但通过 C# 执行此操作会更简单。

有没有办法做到这一点(除了IScript(?基本上我正在寻找一种机制来

  • 允许在事务上下文中对数据库发出任意命令
  • 如果转换成功完成,请将该"迁移"记录为已完成

IScript似乎是最接近的事情 - 想知道是否有更好的东西。

是的

- 请参阅 https://dbup.readthedocs.io/en/latest/usage/#code-based-scripts

基于代码的脚本 有时迁移可能需要比实际更多的逻辑 在 SQL 中轻松或可以单独执行。基于代码的脚本提供 在代码中生成 SQL 的工具,具有开放的数据库连接 以及提供的 System.Data.IDbCommand 工厂。

基于代码的迁移是实现 IScript 的类 接口。ProvideScript(( 方法在 轮到迁移执行了,所以它之前的脚本已经 被执行。

当然,命令工厂不仅可以用于查询。 整个迁移本身可以在代码中执行:

public class Script0006UpdateInCode : IScript
{
    public string ProvideScript(Func<IDbCommand> commandFactory)
    {
        var command = commandFactory();
        command.CommandText = "CREATE TABLE [dbo].[Foo]( [Name] NVARCHAR(MAX) NOT NULL )";
        command.ExecuteNonQuery();
        return "";
    }
}

相关内容

  • 没有找到相关文章

最新更新