1

我正在创建一个使用 LINQ to SQL 和 WiX 进行部署的 WPF 项目。

我不确定如何处理应用程序的次要或主要更新之间的数据库架构更改。

例如,如何处理将已部署的 v1.0.0.0 应用程序更新到 v1.0.1.0,这需要对现有数据库进行模式更改(新的或修改的类)。如果我只是部署更新的应用程序,它会崩溃,因为现有的数据库模式与新代码不匹配。

根据我的研究,我想简化的过程将是使用 Liquibase 之类的东西v1.0.0.0 和 v1.0.1.0 数据库之间生成 SQL ALTER 脚本,并在 WiX 升级期间执行这些更改脚本,但似乎在那里将是一种更“内置”的方法来更优雅地处理这个问题(Database Diffs的问题并没有灌输很多信心)。

是否可以完全在 WiX 或 Visual Studio 中检测/跟踪/部署数据库更改?

Edit:

我应该注意到,目前当我们对代码进行更改时(至少在开发世界中),我们只是在运行时使用默认数据删除并重新创建/重新填充我们的数据库,以便 LINQ to SQLCreateDatabase()只是根据新代码创建架构。

我看到很多提到使用 SQLMetal 生成 dbml 文件,但我没有为我的数据库使用任何类型的设计器,如果你愿意的话,我们正在做“代码优先”。这就是我感到困惑的地方;那我必须使用 dbml 方法吗?

我见过 Linq to Sql Database Synchronization 开源项目(CodeProjectCodePlex),但其中一个不支持 SQL 2012,而另一个错误是不支持 Timestamp 类型和其他需要我进行大量自定义的错误。

4

1 回答 1

0

我现在决定采用的解决方案如下:

部署 v1 时,将数据库保存为“dbv1”。

部署 v2 时,将数据库保存为 'dbv2',并在Visual Studio > SQL > Schema Compare > New Comparison

来源:dbv1,目标:dbv2

Generate Script (Shift + Alt + G)

SqlScript然后,此 .sql 脚本作为一个元素包含在 WiX 升级包中。

这不是我想要的——因为你必须有一个旧数据库的副本来比较——但至少它不需要任何昂贵的工具。

于 2013-10-02T19:56:28.467 回答