10

简介: 我有这个 ASP.NET Webforms 站点,其特点是它不仅有 1 个数据库,它有很多。为什么?因为您可以即时创建站点的新“实例”。每个“实例”共享相同的代码库,但有自己的数据库。这些所有数据库都具有相同的架构(结构),但当然数据不同。不要问“为什么不将所有内容都放在一个数据库中并使用 InstanceId 知道哪个是”,因为这是一个业务策略问题。

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

当前情况:目前没有任何东西可以帮助我们同步维护每个实例数据库(将架构更改传播到每个数据库)。所以我们是手工做的,这当然是一团糟。

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

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

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

这怎么能用migratordotnet或任何类似的东西来完成?非常欢迎任何其他建议。

谢谢!

4

4 回答 4

5

由于这是一个老问题,我假设您已经以某种方式解决了这个问题,但无论如何我都会发布一个解决方案,以帮助其他人偶然发现这个问题。可以从代码中调用 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();
}
于 2011-02-21T15:53:46.410 回答
1

RedGate 有一个可以使用的 SQL 比较 SDK。这是一个看起来很有希望的案例研究,但我无法从经验中告诉你任何事情,因为我没有使用它。下载试用版并踢轮胎。

于 2010-07-26T13:16:42.430 回答
1

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

于 2011-02-17T14:17:45.630 回答
0

查看Fluent-Migrator

于 2010-07-15T06:19:29.047 回答