代码之家  ›  专栏  ›  技术社区  ›  eddiewould

使用DbUp执行C 35;(过程性)迁移

  •  0
  • eddiewould  · 技术社区  · 6 年前

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

    我意识到DbUp的基本原理是用SQL来完成所有的工作,但在某些情况下,C是更好的工具。

    例如,假设您正在数据库中存储序列化的二进制blob(忽略这是否是一个好主意),并且希望更改这些blob的结构。您的应用程序代码具有反序列化/序列化这些blob的诀窍。这么做可能是 可能的 通过SQL,但通过C#执行会更简单。

    有办法这样做吗(除了 IScript )? 基本上我在找一个机制

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

    下标 似乎是最接近的东西-想知道是否有更好的东西。

    1 回复  |  直到 6 年前
        1
  •  0
  •   eddiewould    6 年前

    是-看 https://dbup.readthedocs.io/en/latest/usage/#code-based-scripts

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

    基于代码的迁移是一个实现IScript的类 接口。providDescript()方法在 该执行迁移了,所以之前的脚本 已经被处决。

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

    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 "";
        }
    }
    
    推荐文章