Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Installation 在产品安装程序中流畅地迁移多个平台_Installation_Wix_Database Migration_Fluent Migrator - Fatal编程技术网

Installation 在产品安装程序中流畅地迁移多个平台

Installation 在产品安装程序中流畅地迁移多个平台,installation,wix,database-migration,fluent-migrator,Installation,Wix,Database Migration,Fluent Migrator,我们为外部付费客户开发产品(即,我们不是只为我们控制范围内的环境生产产品的内部IT职能部门),目前我们必须支持SQL Server 2005+和Oracle 10.2+作为后端。我们将TeamCity与Wix一起用于CI和构建,这些构建将传递给我们的测试团队,显然,最终在测试结束时传递给我们的客户。目前,我们有无数的SQL脚本来升级数据库。在最基本的形式中,可能有DDL脚本和数据脚本(每个版本、每个平台),但也可能有包含存储过程的脚本,甚至是特定于客户端的脚本。根据客户端升级的版本(例如2.0到

我们为外部付费客户开发产品(即,我们不是只为我们控制范围内的环境生产产品的内部IT职能部门),目前我们必须支持SQL Server 2005+和Oracle 10.2+作为后端。我们将TeamCity与Wix一起用于CI和构建,这些构建将传递给我们的测试团队,显然,最终在测试结束时传递给我们的客户。目前,我们有无数的SQL脚本来升级数据库。在最基本的形式中,可能有DDL脚本和数据脚本(每个版本、每个平台),但也可能有包含存储过程的脚本,甚至是特定于客户端的脚本。根据客户端升级的版本(例如2.0到2.7)的不同,它们可能需要以正确的顺序运行多达24个脚本

很明显,人为错误的范围很大,目前没有降级的方法,而且由于脚本的自动版本编号存在缺陷(以及DB记录运行了哪些脚本的非常糟糕的方式),在DB上运行了什么并不总是很清楚。显然,这不是一个好情况

我正在研究如何使用Fluent Migrator或类似工具(不一定是Fluent),以尝试在整个过程中提供更多的顺序和版本控制,但尽管有大量关于如何将其与CI结合使用的文章和示例,但我找不到任何关于将迁移集成到MSI安装程序或类似工具的信息

我想做的是,要么把它作为我们整个安装程序的一部分,要么专门为升级/降级数据库制作一个。暂且不考虑任何特定于客户端的迁移,这样从安装程序执行通用迁移是否可能?如果是这样的话,那么在一个安装程序中针对多个平台如何(即,让SQL和Oracle迁移都可用,并在运行时确定要使用哪个平台)

我的计划是将迁移保持在单个程序集中(类似于中的描述),并让安装程序根据创建安装程序时嵌入的信息执行适当的向上/向下迁移。假设可以做到这一点,这听起来是一个明智的解决方案,还是有更好的方法来管理我不知道的所有这些

非常感谢


史蒂夫是的,这是绝对可能的

要从自己的代码运行FluentMigrator,只需创建RunnerContext并执行它。有关示例,请参见


为了针对不同的平台,可以在执行RunnerContext时通过数据库参数传入数据库类型来控制这一点。其他选项正在传入要在迁移中使用的。或者通过使用可在迁移时设置的筛选。是的,这是绝对可能的

要从自己的代码运行FluentMigrator,只需创建RunnerContext并执行它。有关示例,请参见


为了针对不同的平台,可以在执行RunnerContext时通过数据库参数传入数据库类型来控制这一点。其他选项正在传入要在迁移中使用的。或者使用可在迁移时设置的筛选。

谢谢!!这和我想要的一模一样。我认为我可以从自定义任务执行迁移,或者在安装后从实用程序应用程序执行迁移,但对我来说最重要的特性是标记。随着时间的推移,这看起来会为我解决很多问题。我将仔细阅读这些页面,然后开始计划一个概念验证原型,向我的老板展示我们可以将其用于SQL和Oracle。以后也可以在博客上分享这些信息,因为我发现很难掌握基本的CI用法。听起来很棒。请随意用一个例子来更新wiki,说明如何做到这一点!非常感谢。这和我想要的一模一样。我认为我可以从自定义任务执行迁移,或者在安装后从实用程序应用程序执行迁移,但对我来说最重要的特性是标记。随着时间的推移,这看起来会为我解决很多问题。我将仔细阅读这些页面,然后开始计划一个概念验证原型,向我的老板展示我们可以将其用于SQL和Oracle。以后也可以在博客上分享这些信息,因为我发现很难掌握基本的CI用法。听起来很棒。请随意用一个例子来更新wiki,说明如何做到这一点!