sql-server - 如何更改数据库而不丢失数据?

标签 sql-server asp.net-mvc-3 entity-framework

我首先使用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/

相关文章:

c# - MVC 3 在 ValidationSummary 中显示 HTML

asp.net-mvc - EntityFramework 的 Activerecord 回调和 NamedScope 版本

vb.net - 永远不会调用IMetadataAware.OnMetadataCreated

linq - Entity Framework 表之间的多重关系

c# - 在 Entity Framework 中使用一个存储过程插入到两个表中

实体数据模型向导中未显示 MySQL 数据提供程序

c# - 如何解决 SqlException 在锁定时死锁 |通信缓冲资源

sql-server - sql中NULL的数学运算

sql - 此查询如何获取当月的第一天?

sql - 避免在 UPDATE 语句中多次调用标量函数