当从多个位置使用的数据库中删除列时,维护实体数据模型

本文关键字:删除列 维护 数据模型 实体 数据库 位置 | 更新日期: 2023-09-27 18:04:54

假设我有一个从数据库生成的实体数据模型。我在许多地方的代码中使用其中一列,但是有一天我决定不再需要它,所以我从数据库中删除了它,并且代码中从实体数据模型引用该属性的地方现在被破坏了。唯一的解决办法是去每个地方解决问题吗?或者有什么策略或工具可以帮助解决这种情况吗?

当从多个位置使用的数据库中删除列时,维护实体数据模型

这个问题只适用于尚未发布的应用程序。如果应用程序已经发布,并且该列已经存在,则不会删除或删除它。现有客户可能依赖于该列的数据,它可能绑定到应用程序逻辑等。出于兼容性原因,它不会被删除。

如果这是预生产应用程序(1.0版本之前),那么在删除数据库中的物理列之后,任何ORM解决方案都应该能够重新创建逻辑和可概念的模型。此时,可能需要在应用程序的其他层(UI、业务等)中进行一些清理,这些层以某种方式引用可概念模型。例如,可能需要更新UI以删除该数据的显示。这需要一些手工操作。

一般来说,最好保留它,除非应用程序处于开发的早期阶段。

因此,您没有指定列中的数据和需要删除它,因此我们必须使用一般术语。

如果您可以从数据库中删除该列,并且在代码的许多地方使用它,那么它可能是计算列-通常,这意味着您可以从其他数据点获得相同的信息。因此,在实体模型中,应该停止将列映射到数据库,而是在代码中复制逻辑,以计算属性的完整意义值。或者您可以在表上创建一个视图,并在数据库端计算列,并将您的实体映射到视图而不是表。

如果没有计算该列,那么从数据库中删除该列意味着数据丢失。如果这是可以接受的,那么它本质上表明了底层商业模式的变化,在那里数据点变得无关紧要。这里有两个选择-

  1. 去改变你的代码,不使用这个属性——它本质上意味着你将调整你的代码,以适应商业模式/流程的变化,你最终必须在某个时候做。
  2. 将列保留在数据库中一段时间,但具有完全有意义的默认值。将实体模型属性标记为obsolete,这样它就会开始发出警告。花点时间修改代码,最终目的是在一段时间内删除属性用法,然后删除数据库列。