1

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

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

例如,假设您将序列化的二进制 blob 存储在数据库中(忽略这是否是一个好主意)并且您想要更改这些 blob 的结构。您的应用程序代码具有反序列化/序列化这些 blob 的专有技术。通过 SQL可以做到这一点,但通过 C# 做到这一点会更简单。

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

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

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

4

1 回答 1

1

是 - 请参阅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 "";
    }
}
于 2018-08-07T10:49:24.040 回答