我首先使用EF 4.1代码,Mvc3,Sql Sever 2008 r2开发了一个网站,并部署了它。
主机上的数据库已充满关键数据,并且仍在增长。 现在我想向不同的表添加新列,并添加新表。 即使我备份 SQL 并将其带入开发环境并使用 base.seed() 或什至使用 SQL 服务器管理创建脚本,我也会丢失数据,并且我尝试了不同的方法,但找不到一种方法不会丢失数据。
我查看了代码优先迁移,它没有解决我的问题。我的团队使用 SQL Server 管理向数据库添加了一些表,如果我使用代码优先迁移,它不会选择手动发生的更改。有人建议使用逆向工程工具,首先从数据库创建代码,但这也会产生许多不需要的代码。
使用代码优先方法更改数据库的最佳方法或最佳实践是什么?
最佳答案
迁移会对您有所帮助。您只需编写当前数据库的脚本并在您的环境中重新创建它。然后您需要 add empty initial migration 使用当前数据库作为起点。然后,您将添加所有新表和列,并让迁移完成其工作。当然,可能会出现问题,因为您在生产中手动更改了数据库,但这首先是您团队的失败,因为它违反了代码优先的开发方法。如果发生这种情况,您不应该使用代码优先方法。
作为替代方案,只需使用新表和列开发应用程序的新版本,在开发环境中从应用程序创建数据库,并使用 VS 2010(高级版或旗舰版)或其他商业工具(如 Red Gate Compare)中的数据库工具进行架构比较。这将能够创建 diff SQL 脚本,用于将旧数据库架构升级到新数据库架构。
关于sql-server - 如何更改数据库而不丢失数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9884772/