Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
管理C#项目中的DB变更_C#_Sql Server_Tableadapter - Fatal编程技术网

管理C#项目中的DB变更

管理C#项目中的DB变更,c#,sql-server,tableadapter,C#,Sql Server,Tableadapter,我有一个C#应用程序(在VisualStudio2010中),它使用SQLServer2005,通过C#中的TableAdapters访问 我还没有发现一种管理数据库更改的好方法。例如,在我的下一个版本中,我有一系列的db模式更改。我在SQLServerManagementStudio中对数据库进行了所有更改。但现在,在部署新的应用程序代码后,我必须依次在生产服务器上手动进行这些更改(速度慢且有缺陷) 此外,如果我决定将我的版本回滚到以前的版本,我必须手动完成并撤消所有数据库更改,然后才能部署旧

我有一个C#应用程序(在VisualStudio2010中),它使用SQLServer2005,通过C#中的TableAdapters访问

我还没有发现一种管理数据库更改的好方法。例如,在我的下一个版本中,我有一系列的db模式更改。我在SQLServerManagementStudio中对数据库进行了所有更改。但现在,在部署新的应用程序代码后,我必须依次在生产服务器上手动进行这些更改(速度慢且有缺陷)

此外,如果我决定将我的版本回滚到以前的版本,我必须手动完成并撤消所有数据库更改,然后才能部署旧代码(现在由于应用程序关闭,我受到时间限制)。同样,这也是非常容易出错的

哦,希望我的一个错误不会对生产数据库造成大规模破坏,否则我现在必须从存储中取出最新的备份并重试(非常耗时)

我听说过从Rails迁移(以及类似亚音速的风暴)之类的事情。我认为新的ORM样式(用c#代码定义您的模式)有助于缓解很多问题,但不幸的是,由于我使用TableAdapters,我不知道如何实现迁移之类的功能


人们如何处理这个问题?

DBs的发布管理通常涉及静态数据的迁移和脚本的运行,以更新/创建可编程元素(存储过程、UDF、触发器等)并修改现有的模式定义。在我看来你好像错过了剧本。如果您正在手动更改开发数据库,而不是创建反映这些更改的脚本,那么您将需要对测试/生产环境重复相同的手动步骤,正如您所说,这是容易出错和危险的

SQLServerManagementStudio可以轻松保存反映对任何数据库对象所做更改的脚本。在工具栏中应该有一个名为“生成更改脚本”的图标,它为您提供将SQL文件保存到磁盘的选项。然后,您可以使用它对另一台服务器执行相同的更改。您还可以手动编写任何或所有存储过程、UDF、触发器等的脚本,并在服务器上运行它们(只需右键单击它们)

至于回滚,通常是通过在部署过程开始之前恢复数据库的备份来实现的

每个公司的整个流程往往不同,但通常都是这样


自动生成模式的ORM对我来说总是很邪恶,更不用说在生产环境中使用它几乎是不可能的了,但是我想也有一个选择。

解决这个问题的最简单方法是购买软件,通过比较两个数据库的更改来检测数据库模式,并生成可以更新目标数据库的更改脚本。我正在使用VisualStudioUltimate 2010,但也有更便宜的软件可以做到这一点。这在99%的情况下对我有效(唯一一个对我无效的实例是当我重命名一个表列时)

如果您没有这样的软件,手动生成SQL更改脚本是至关重要的。无论何时对数据库模式进行更改,都要跟踪用于该更改的SQL,并将其添加到数据库模式更改的一个大文件中,以用于下一版本的软件。刚开始有点乏味,但你很快就会习惯的

然后,当您准备好部署软件时,按如下步骤进行:

  • 让网站离线
  • 对当前生产数据库进行备份
  • 对当前生产网站进行备份
  • 将新代码上载到服务器
  • 运行之前创建的DB changes脚本(手动或使用上述软件)
  • 让网站重新上线,看看它是否有效。如果没有,并且您无法轻松修复问题,请恢复到以前的网站和db版本,直到您修复了错误 所有这些步骤都可以使用批处理文件和SQLServer代理或SQLCMD轻松实现自动化


    通常,您应该首先部署到临时服务器,然后非常彻底地测试您的网站,然后再转移到生产服务器。这样可以避免生产服务器上较长的停机时间,并将丢失任何重要数据的风险降至最低

    在红门软件公司,我们目前正在解决这个问题。请查看我们的SSMS插件,并结合。我们还正在开发一个“迁移”功能,该功能将于今年晚些时候推出,允许为特定的版本转换定义自定义迁移脚本。由于我们仍处于项目的早期阶段,仍然有时间帮助我们设计一个伟大的解决方案。我们很乐意与您进一步谈谈您的要求

    为什么“我必须手动执行并撤消所有数据库更改”?只需恢复以前的DB.+1。您肯定需要编写脚本来执行所做的更改。您还需要经常备份数据库,以便在必要时回滚它们。上述迁移现在只需对上述-SQL Source Control 3和SQL Compare 10进行更新即可。