【问题标题】:How to get a compile time error when the database schema changes?数据库架构更改时如何获取编译时错误?
【发布时间】:2009-03-14 08:31:51
【问题描述】:

当 ASP.NET 项目中发生数据库架构更改时,您使用什么方法来获取编译时错误?

例如,如果您将 GridView 绑定到 DataSource,我只能在架构更改发生时得到运行时错误,而不是编译时错误。 Intellisense 在使用数据集、LINQ 等背后的代码上运行良好,但是当我更改架构时,我似乎无法在 ASP.NET 页面上收到编译时错误。

有什么建议吗?

【问题讨论】:

    标签: asp.net sql data-binding


    【解决方案1】:

    创建一个单元测试来验证数据访问层的正确性,并确保它涵盖了所有与数据库相关的代码。并非所有内容都可以在编译时捕获...

    【讨论】:

      【解决方案2】:

      我能想到的轻松实现此行为的一种方法是将数据绑定到动态 DAL。有一些工具可以帮助生成这个 DAL,我建议看看 SubSonic

      一旦你有了像 SubSonic 这样的东西,你就可以绑定到生成的业务对象。这些业务对象将在数据库中的架构更改的情况下自动更改,这将破坏您的绑定代码,从而导致编译时错误。

      更新

      Assaf 建议使用单元测试也是一个好主意。它不能解决您所说的问题,但它绝对是应该存在的,并且是标记此类问题的好工具。

      【讨论】:

      • 如果 DAL 被设置为构建任务,它将被重新生成,否则这不会拯救他。您仍然可以在不生成代码的情况下更改数据库模式。我同意如果您记得重新生成 DAL 类,跟踪修改肯定会更容易。
      • 我现在没有在任何项目中使用它,但我很确定 SubSonic 使用动态生成,因此您不必手动更新。
      【解决方案3】:

      我们使用一个适度的系统(从 xml 到 c++)从独立的描述中创建模式,这个系统还为我们在代码中使用的表和列创建名称,当模式发生变化时,名称会发生​​变化,如我们最初使用的名称不再存在,编译器将标记错误。

      您可能可以配置很多 DAO 生成工具来做类似的事情。

      【讨论】:

        【解决方案4】:

        一种解决方案是对数据库进行版本控制并将应用程序构建映射到特定版本(可能在属性文件中)。在应用程序的入口点,您可以将预期版本与实际版本进行比较,并相应地处理错误。

        我不确定 ASP.net 中的 Rails 中的 Migrations 或 Java 中的 dbdeploy 用于对数据库进行版本控制的等效项是什么。但是任何数据库版本控制工具都可以使模式更改增量和版本化并在版本表中跟踪版本。

        但是,如果您希望在构建应用时出现编译时错误,您不妨将架构升级到最新版本作为构建过程的一部分,从而避免首先发生架构更改的可能性。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          • 2014-11-03
          • 1970-01-01
          相关资源
          最近更新 更多