代码之家  ›  专栏  ›  技术社区  ›  empz

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

  •  9
  • empz  · 技术社区  · 15 年前

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

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

    现状: 现在没有任何东西可以帮助我们同步维护每个实例数据库(向每个实例传播模式更改)。所以我们是手工做的,这当然是一团糟。

    问题: 迁移dotnet ,但可以使用任何其他,如果它更容易设置。

    问题是 迁移dotnet 需要在中声明连接字符串 项目构建 文件,直到运行时我才知道。

    应用程序启动 将最新的迁移应用到每个数据库。

    你怎么能这样做 或者类似的? 任何其他建议都欢迎。

    谢谢您!

    4 回复  |  直到 15 年前
        1
  •  5
  •   Aasmund Eldhuset    15 年前

    因为这是一个老问题,我假设你已经以某种方式解决了这个问题,但我还是会发布一个解决方案,以方便其他遇到这个问题的人。可以从代码中调用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();
    }
    
        2
  •  1
  •   Larry Smithmier    15 年前

    RedGate有一个可以使用的SQL比较SDK。这是一个 Case Study 这看起来很有希望,但我不能告诉你我的经验,因为我没有使用它。下载试用版并启动轮胎。

        4
  •  0
  •   mxmissile    15 年前