【问题标题】:How to handle LINQ to SQL schema changes如何处理 LINQ to SQL 架构更改
【发布时间】:2013-10-03 03:56:28
【问题描述】:

我正在创建一个使用 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 文件,但我没有为我的数据库使用任何类型的设计器,如果你愿意的话,我们正在执行“代码优先”。这就是我感到困惑的地方;那么我有使用 dbml 方法吗?

我已经看到了 Linq to Sql 数据库同步开源项目(CodeProject 和 CodePlex),但其中一个不支持 SQL 2012,其他错误则与不支持时间戳类型和其他需要我的错误有关做很多自定义。

【问题讨论】:

    标签: c# wpf linq-to-sql visual-studio-2012 wix


    【解决方案1】:

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

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

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

    来源:dbv1,目标:dbv2

    Generate Script (Shift + Alt + G)

    此 .sql 脚本随后作为 SqlScript 元素包含在 WiX 升级包中。

    这不是我想要的——因为您必须拥有旧数据库的副本才能与之进行比较——但至少它不需要任何昂贵的工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多