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

C# .NET迁移:在运行时设置和迁移多个数据库,c#,asp.net,migration,multiple-databases,migratordotnet,C#,Asp.net,Migration,Multiple Databases,Migratordotnet,简介: 我有一个特殊的ASP.NET Webforms网站,它并不是只有一个数据库,而是有很多数据库。 为什么?因为您可以动态创建站点的新“实例”。每个“实例”共享相同的代码库,但有自己的数据库。所有这些数据库都具有相同的模式(结构),但数据当然不同。不要问“为什么不把所有东西都放在一个数据库中,并使用InstanceId来知道哪个是”因为这是一个业务策略问题 应用程序知道由于url请求了哪个实例。有一个额外的数据库来完成这项任务(我在设计时知道它的连接字符串)。该数据库只有2个表,并将url与

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

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

当前情况:目前没有任何工具可以帮助我们同步维护每个实例数据库(将架构更改传播到每个实例)。因此,我们只能手工操作,这当然是一团混乱

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

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

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

如何使用migratordotnet或任何类似工具实现这一点?非常感谢您的建议


谢谢!

请查看。

RedGate有一个SQL比较SDK可以使用。这里有一个看起来很有希望的,但我不能从经验中告诉你一些事情,因为我没有使用过它。下载试用版,然后重新开始。

你可以使用Mig来在你的C或.NET代码中维护迁移:

因为这是一个老问题,我假设您已以某种方式解决了该问题,但为了其他遇到此问题的人的利益,我将发布一个解决方案。可以从代码中调用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();
}

从发布文件来看,似乎基于MigratorDotNet。文档非常糟糕,我真的不知道如何从应用程序启动时获得的数据库列表中运行迁移。+1-RedGate的SQL比较/迁移工具非常优秀。我没有使用过他们的SDK,但如果它与他们的开发人员工具类似,那么应该是exac这正是你想要的。我想我忘了提到我需要一些免费的东西。无论如何,RedGate的方法似乎类似于VS:数据库工具…这我并不喜欢。我只是想找一些类似Rails迁移的东西,它已经存在于.NET中,但需要在运行时让它与多个已知的数据库一起工作。。。