Sql 预期的数据库模型在实时性上不一致

Sql 预期的数据库模型在实时性上不一致,sql,visual-studio-2010,sql-server-2005,asp.net-mvc-2,ado.net,Sql,Visual Studio 2010,Sql Server 2005,Asp.net Mvc 2,Ado.net,在中,我遇到了一个问题:我正在为已部署的应用程序编写更新,以使数据库与我们正在部署的较新版本保持同步。基本情况如下: 从当前部署的应用程序版本开始 添加了使用现有数据库的新功能 添加了新的数据库表和关系 添加了依赖于新数据库结构的新功能 测试完成,准备部署 这里的问题是,当前部署的应用程序已经使用了几个月,并且有大量需要保留的数据,因此简单地用新的替换旧的是不可行的(至少对于数据库来说不是这样,但是对于代码来说当然是行得通的)。因此,我使用以下步骤在SQL中编写了一个脚本,以便应用程序的更新

在中,我遇到了一个问题:我正在为已部署的应用程序编写更新,以使数据库与我们正在部署的较新版本保持同步。基本情况如下:

  • 从当前部署的应用程序版本开始
  • 添加了使用现有数据库的新功能
  • 添加了新的数据库表和关系
  • 添加了依赖于新数据库结构的新功能
  • 测试完成,准备部署
这里的问题是,当前部署的应用程序已经使用了几个月,并且有大量需要保留的数据,因此简单地用新的替换旧的是不可行的(至少对于数据库来说不是这样,但是对于代码来说当然是行得通的)。因此,我使用以下步骤在SQL中编写了一个脚本,以便应用程序的更新版本在首次启动时运行,以便在不接触现有数据的情况下对数据库进行必要的更改(除了填充新表之外):

  • 使用VS2010的“从模型生成数据库”功能创建.sql(该模型最初是使用“从数据库生成模型”功能创建的)
  • 删除作用于现有表的.sql的所有部分,但在新表和旧表之间添加FK的部分除外
  • 使用生成的脚本构建新数据库
听起来挺干净的,对吧?错。对于新表,从模型到数据库的映射都是错误的。长话短说,生成模型的数据库具有复数形式的表(映射正确且应用程序正常工作),由模型生成的数据库创建了复数形式的表(与DB生成模型的表的名称相同,但模型没有映射到它们)。最终的解决方案是更改脚本以单数形式命名表,然后一切都完美无瑕

这里发生了什么事?代码保持不变,没有对模型进行任何更改,旧表在整个过程中都能正常工作,但仍处于运行过程中的某个地方

  • 生成脚本
  • 删除“新”表和约束(已部署版本中尚不存在的表和约束)
  • 运行脚本以重新添加表
映射决定为单名表(用户而不是用户,地址而不是地址,等等)


有人能解释一下为什么会这样吗?

你可能想看看redgate提供的一些工具——比较两个DB结构和生成要更新的脚本的好工具