.NET迁移:在运行时设置和迁移多个数据库

时间:2010-07-15 06:11:54

标签: c# asp.net migration multiple-databases migratordotnet

简介: 我有这个ASP.NET Webforms站点的特殊性,它没有只有1个数据库,它有很多。 为什么?因为您可以即时创建站点的新“实例”。每个“实例”共享相同的代码库,但拥有自己的数据库。这些所有数据库都具有相同的模式(结构),但当然是不同的数据。不要问'你为什么不把所有东西放在一个数据库中,并使用InstanceId知道哪个是“因为这是一个商业政策的事情。”

由于url,应用程序知道正在请求哪个实例。有一个额外的数据库来完成这个(我知道它在设计时的连接字符串)。此数据库只有2个表,并将URL与“应用程序实例”关联。然后,当然,每个“应用程序实例”都有其关联的连接字符串。

当前情况:现在没有任何东西可以帮助我们完成同步保存每个实例数据库的工作(将模式更改传播到每个实例)。所以我们手工完成,这当然是一团糟。

问题:我想使用rails-migration方式处理架构更改,最好是 migratordotnet ,但如果更容易设置,可以使用其他任何方式。< / p>

问题是 migratordotnet 需要在 proj.build 文件中声明连接字符串,直到运行时我才知道它们。

Application_Start 上运行的某种方法将最新的迁移应用于每个数据库,这将是非常有用的。

如何使用 migratordotnet 或类似内容完成此操作?欢迎任何其他建议。

谢谢!

4 个答案:

答案 0 :(得分:4)

由于这是一个老问题,我认为你已经以某种方式解决了这个问题,但我会发布一个解决方案,以免其他人绊倒这个问题。可以从代码调用MigratorDotNet,而不是将其作为MSBuild目标:

public static void MigrateToLastVersion(string provider, string connectionString)
{
    var silentLogger = new Logger(false, new ILogWriter[0]);
    var migrator = new Migrator.Migrator(provider, connectionString, 
                   typeof(YourMigrationAssembly).Assembly, false, silentLogger);
    migrator.MigrateToLastVersion();
}

答案 1 :(得分:1)

答案 2 :(得分:1)

您可以使用Mig#在C#或.NET代码中维护迁移:https://github.com/dradovic/MigSharp

答案 3 :(得分:0)

查看Fluent-Migrator