0

this question中,我遇到了一个问题,我正在为部署的应用程序编写更新,以使数据库与我们正在部署的较新版本保持同步。基本轮廓如下:预期的数据库模型实时不一致

  • 开始与应用程序的当前部署版本
  • 是使用现有的数据库
  • 增加了新的数据库表和关系
  • 是依赖于新
  • 增加了新的功能
  • 的新增功能数据库结构
  • 测试完成,准备部署

这里的问题是,目前部署的应用程序已经使用了几个月,并且需要保存大量数据,因此只需更换旧版本并不可行(至少不适用于数据库,但它当然适用于代码)。因此,我使用以下步骤在SQL中编写脚本以获取应用程序的更新版本,以便在第一次启动时对数据库进行必要的更改而不触及现有数据(除填充新表格外):

  • 使用VS2010的“生成模型数据库”功能来创建一个.SQL
  • 删除关于该法案的.SQL的所有部件(模型用的是“生成数据库模式”功能的最初创建)现有表格,除了在新旧表格之间添加FK的表格外
  • 使用生成的脚本构建新的数据库

听起来很干净,做对吧?错误。新表格从模型到数据库的映射都是错误的。长话短说,生成模型的数据库具有以复数形式命名的表(并且映射是正确的并且应用程序工作),并且由模型生成的数据库以复数形式创建表(与DB所在的表相同的名称生成模型,但该模型没有映射到它们)。解决方案最终是改变脚本以单数命名表,然后一切都完美无缺。

这里发生了什么事?代码保持不变,没有变化的模型制作,和旧表继续正常工作的全部时间,但在

  • 过程某处生成脚本
  • 删除“新”表和约束(那些还没有在部署的版本存在)
  • 运行脚本,重新添加表

映射决定是单独命名表(用户插件用户的tead,地址而不是地址等)。

任何人都可以向我解释如何/为什么会发生这种情况?

回答

相关问题