使用DbUp,是否可以用C#(而不是SQL)编写过程迁移?
我认识到DbUp的一般原理是在SQL中做所有事情,但是在某些情况下C#是完成这项工作的更好工具。
例如,假设您要将序列化的二进制Blob存储在数据库中(忽略这是一个好主意),而您想要更改这些Blob的结构。您的应用程序代码具有反序列化/序列化这些Blob的知识。通过SQL可能可能,但是通过C#这样做会更简单。
除了IScript
以外,还有其他方法吗?基本上,我正在寻找一种机制
IScript
似乎是最接近的东西-想知道是否还有更好的东西。
答案 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 ""; } }