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

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

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

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

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

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

真正有用的是在Application_Start上运行的某种方法,它将最新的迁移应用于每个数据库。

如何通过migratordotnet或任何类似的方式完成? 任何其他建议都值得欢迎。

谢谢!

由于这是一个古老的问题,我认为你已经以某种方式解决了这个问题,但无论如何我都会发布一个解决方案,以免其他人绊倒这个问题。 可以从代码调用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(); } 

RedGate有一个可以使用的SQL比较SDK。 这是一个看起来很有希望的案例研究 ,但我不能告诉你,因为我没有使用过它。 下载试用版并踢出轮胎。

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

查看Fluent-Migrator 。