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

时间:2018-08-07 09:41:24

标签: dbup

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

我认识到DbUp的一般原理是在SQL中做所有事情,但是在某些情况下C#是完成这项工作的更好工具。

例如,假设您要将序列化的二进制Blob存储在数据库中(忽略这是一个好主意),而您想要更改这些Blob的结构。您的应用程序代码具有反序列化/序列化这些Blob的知识。通过SQL可能可能,但是通过C#这样做会更简单。

除了IScript以外,还有其他方法吗?基本上,我正在寻找一种机制

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

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

1 个答案:

答案 0 :(得分:0)

是-请参见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 "";
    }
}