【问题标题】:How to automatically upgrade deployed database for end-users如何为最终用户自动升级部署的数据库
【发布时间】:2010-10-23 04:04:39
【问题描述】:

我已经阅读了很多关于如何为开发人员升级数据库等的问题,我倾向于使用migratordotnet 或类似的东西,但似乎升级需要使用类似的东西来运行MSBuild 或 NAnt。这些不是我期望最终用户安装的东西。

理想情况下,该过程应该是用户安装新版本的应用程序,启动它,然后它会处理幕后的一切。根据这个过程需要多长时间,我可能会或可能不会显示进度条,然后它就完成了,使用该应用程序通常会很高兴地不知道有诸如 sql、msbuild、关系数据库之类的东西,或者任何远程技术听起来的东西。

其他杂项信息:

安装了 xcopy 的 SQLCE。

很可能不应该太大的单用户数据库。

随着程序通过用户对请求功能的输入而不断发展,发布将相当频繁。

初始版本尚未完成,所以 不需要担心任何 当前数据,只需要无痛 初始和后续流程 发布(对于最终用户, 最好也适合我!)。

使用 LINQ to SQL 作为 ORM。 (我是否 先升级数据库再升级
运行 SQLMetal 以重新生成
类?)

做 TDD(第一次)和 想知道如何自动化测试 升级。

Visual C# Express 所以没有 VS 插件。

编辑:

我猜 MSBuild 附带 .NET Framework 而不仅仅是 VS,所以我猜这不是问题,我可以使用 migratordotnet 并直接使用 msbuild。如果需要,我可能会重定向控制台输出并进行一些简单的字符串解析以获取进度信息,但如果它看起来需要足够长的时间来保证显示实际进度而不仅仅是选取进度条,我会求助于。

【问题讨论】:

    标签: .net sql-server-ce database-migration


    【解决方案1】:

    一般来说,这个东西通常的做法是在安装时进行数据库迁移;在安装期间,您有一大堆代码(通常是完全自定义的),它们检测数据库的现有版本,并执行将数据从现有数据库迁移到新数据库所涉及的所有操作(即创建临时表、复制数据)从现有表到临时表、删除现有表、创建新表、执行连接以将临时表中的数据添加到新表等)。根据定义,这个过程非常复杂。我不知道有任何工具可以专门针对最终用户生产环境自动执行转换过程。 (处理最终用户数据库通常会涉及很多特殊情况。)

    【讨论】:

      【解决方案2】:

      这是一个选项:

      1. 将数据库版本存储在数据库中的某处
      2. 在启动时,通过将代码中的常量与数据库版本进行比较,确保数据库是最新的。
      3. 如果不是当前运行一组脚本来创建/更改表、转换数据等。

      如果您已经部署并且没有数据库版本,那么只需检查架构以了解您在最新数据库版本中的预期内容。

      测试:

      1. 从旧数据库开始
      2. 为 UpdateDatbaseIfNeeded() 创建一个方法
      3. 如果架构得到更新并且数据库版本得到设置,测试应该通过

      您还可以预加载您的测试数据库,以测试需要由升级脚本处理的各种转换问题。

      【讨论】:

        【解决方案3】:

        您可以使用Wizardby 执行以下操作。

        它有一个 API,允许您以编程方式执行数据库架构迁移任务。你需要一个合适的IDbPlatformSqlCePlatform 也有),一个IMigrationVersionInfoManager,它有一个标准实现,将版本信息存储在SchemaInfo 表中,一个IMigrationScriptExecutive,它也有默认实现,和IMigrationService 本身。接下来,您编写一个migration definition,将其编译到您的程序集中并将其提供给IMigrationService.Migrate(connectionString, null, yourMigrationDefinition)

        【讨论】:

          【解决方案4】:

          我要添加到上述 cmets 的唯一一件事是您还需要担心包类型的操作。

          要将您的应用程序从 SQL CE 3.1 升级到 3.5,您需要安装 3.5 库,然后发出打包操作以升级数据库格式。作为流程的一部分,您可能希望牢记这一点。对于 SQL CE 3.5,仅在 3.5 中打开数据库将使其不再与 3.1 兼容——这意味着如果您的用户后来恢复了应用程序的备份或您无法加载它的东西。因此,您需要在连接时捕获这些错误,并确保处理来自 MS 的所有异常,因为版本不兼容。

          3.1 和 3.5 的另一个问题是您不能同时将它们都加载到 Visual Studio。因此,反复测试此过程意味着您可以反复擦除和升级虚拟机。你不能在你的开发机器上真正做到这一点。 :(

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-01
            • 2014-05-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-28
            相关资源
            最近更新 更多