如何为最终用户自动升级已部署的数据库

时间:2009-05-01 16:52:24

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

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

理想情况下,该过程应该是用户安装新版本的应用程序,启动它并处理场景背后的所有内容。根据进程需要多长时间,我可能会或可能不会显示进度条,然后就完成了,使用应用程序通常无法意识到存在诸如sql,msbuild,关系数据库或任何甚至远程技术声音之类的东西。< / p>

其他misc信息:

安装了xcopy的SQLCE。

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

通过用户对所请求功能的输入,程序的发布将非常频繁。

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

将LINQ to SQL用作ORM。 (我呢    首先升级数据库然后再升级    运行SQLMetal以重新生成
   课程?)

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

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

编辑:

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

4 个答案:

答案 0 :(得分:2)

以下是一个选项:

  1. 在数据库中的某处存储db版本
  2. 启动时,通过将代码中的常量与db版本进行比较,确保数据库是最新的。
  3. 如果不是当前运行一组脚本来创建/更改表,转换数据等。
  4. 如果您已经部署并且没有db版本,那么只需在最新的db版本中检查架构是否符合预期。

    测试:

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

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

答案 1 :(得分:1)

我要在上述评论中添加的唯一内容是您还需要担心打包类型操作。

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

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

答案 2 :(得分:0)

通常,这种方法通常是在数据库迁移是在安装时完成的。在安装过程中,您有一大堆代码(通常是完全自定义的)来检测数据库的现有版本,并执行将数据从现有数据库迁移到新数据库所涉及的所有操作(即创建临时表,复制数据)从现有表到临时表,删除现有表,创建新表,执行连接以将临时表中的数据添加到新表等。根据定义,该过程非常复杂。我没有意识到任何能够专门为最终用户生产环境自动化转换过程的工具。 (处理最终用户数据库通常涉及很多特殊情况。)

答案 3 :(得分:0)

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

它有一个API,允许您以编程方式执行数据库模式迁移任务。您需要一个适当的IDbPlatformSqlCePlatform也是),IMigrationVersionInfoManager,它有一个标准实现,可以在SchemaInfo表格中存储版本信息,{{1} 1}}也有默认实现,IMigrationScriptExecutive本身。接下来,您编写一个migration definition,将其编译到您的程序集中并将其提供给IMigrationService