我正在使用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期间执行这些更改脚本升级,但似乎会有更“内置”的方法来更优雅地处理这个问题(Problem with Database Diffs并没有充满信心)。
是否可以在WiX或Visual Studio中完全检测/跟踪/部署数据库更改?
Edit:
我应该注意到,当我们对代码进行更改时(至少在开发世界中)只是在运行时使用默认数据删除并重新创建/重新填充数据库,以便LINQ to SQL CreateDatabase()
创建基于新代码的架构。
我看到很多提到使用SQLMetal生成dbml文件,但是我没有在我的数据库中使用任何类型的Designer,如果你愿意,我们正在做'代码优先'。这是我困惑的地方;我有使用dbml方法吗?
我见过Linq to Sql Database Synchronization开源项目(CodeProject和CodePlex),但有一个不支持SQL 2012,其他错误不支持Timestamp类型和其他错误这需要我做很多自定义。
答案 0 :(得分:0)
我现在决定采用的解决方案如下:
部署v1时,将数据库另存为“dbv1”。
部署v2时,将数据库保存为“dbv2”,并保存在Visual Studio > SQL > Schema Compare > New Comparison
来源:dbv1,目标:dbv2
Generate Script (Shift + Alt + G)
然后,此.sql脚本将作为SqlScript
元素包含在WiX升级包中。
这不是我想要的 - 因为你必须有一个旧数据库的副本来比较 - 但至少它不需要任何昂贵的工具。