更新桌面应用程序的数据库(修补)

时间:2012-01-02 13:24:10

标签: c# .net sql-server entity-framework

我想知道在修补程序时用于更新客户端数据库的内容是什么?

让我们来看看这个场景:

  1. 您有一个使用sql server compact database的桌面应用程序(.net,实体框架)。
  2. 您发布了使用扩展数据库的应用程序的新版本。
  3. 用户下载包含已修改文件的修补程序
  4. 如何更新数据库?
  5. 我想知道你是如何做这个过程的。我有一些概念,但我认为更有经验的人可以给我更好的尝试解决方案或建议。

3 个答案:

答案 0 :(得分:1)

您需要迁移框架

现有的OSS库如FluentMigrator

实体框架Code First也将获得自己的迁移框架,但它仍处于测试阶段:

答案 1 :(得分:0)

您需要在代码数据库升级机制中明确地或隐藏地提供,并且 - 从而实现类似DB版本链的链接

答案 2 :(得分:0)

它有几个方面。 首先是版本控制。你需要一些方法将teeh版本的teeh db绑定到程序的版本,可能是一个简单的表格,其中包含版本号。您还需要在执行应用程序时进行检查。

一个有趣的场景是你'更新'应用程序和数据库成功,然后由于某些操作原因,客户恢复以前版本的数据库,或者如果你经常进行补丁周期,你是否必须在每个补丁中执行订购或者可以追赶。您是否只想处理应用程序或仅以数据库升级?

没有一种正确的方法,你必须看看你做出了哪些改变,以及为了应对可能出错的一切而你准备维持多大程度的复杂性。

值得关注的一些事情。 两个数据库,一个用于静态“只读”数据,另一个用于更多动态内容。升级静态数据可以简单地从升级包中的资源进行还原。

另一个是你可以对存储在db表中的元数据做多少。例如,基于xsd的版本来描述您的对象而不是具体的类。这是在你的只读数据库中,现在你已经通过恢复和可能的一些转换来更新代码和应用程​​序。

很多方法,请记住 “用户”总能通过做一些你从未想过的事情来找到让你看起来像eejit的方法。

您制作系统越复杂,上述机会就越多。

最后但并非最不重要的是,不要对数据版本转换采取捷径,如果您丢失了数据完整性,那么您所做的一切都将被浪费。