1

我正在开发一个项目,其中我们有两个版本的 MVC 应用程序,实时版本和开发版本,我对开发版本进行了更改并添加了表格和数据等。

有没有办法将这些更改迁移到实时版本而不会丢失所有数据(即只是重新生成数据库)。

我已经尝试过重建数据库,但我们丢失了以前存储的所有数据(显然我们实际上是在删除旧数据库并重建它)。

tl;博士

如何将我的 mvc 应用程序的开发版本以及任何新表迁移到缺少模型和表的 mvc 应用程序的实时版本。

4

2 回答 2

0

这取决于您的部署策略,这更像是您的团队需要接受的工作流程。如果从头开始重新生成实时数据库,则可能需要一段时间,具体取决于数据库的大小。在大多数情况下,我认为不需要这样做。

您只需要分离出数据库模式对象和数据行脚本。实时数据库版本应将其数据库模式对象脚本化并存储在存储库中。当开发人员正在开发新功能时,他/她将需要对存储库中的数据库脚本进行这些更改。如果需要对数据库行进行更改,则开发人员还需要检入存储库中的数据行脚本。在日常部署中,可以将实时数据库版本与存储库中检查的内容进行比较并推送以使其同步。

在我们这边,我们使用 RedGate Schema CompareData Compare等工具将数据库从开发版本迁移到我们预期的目标版本。

于 2013-07-20T14:07:54.620 回答
0

是的,可以将您的更改从您的开发实例迁移到您的生产实例;为此,您必须创建 SQL 脚本,使用更改来更新您的生产数据库。这可以通过手动编写脚本或使用工具为您生成脚本来完成。不管你怎么做,你都需要脚本来更新你的数据库(好吧,你可以通过数据库的工具来执行手动更新,但这并不可取,因为你希望更新在很短的时间窗口内发生,并且你希望这种情况可靠且可重复地发生)。

我知道的最简单的方法是使用 SQL 比较(用于模式更新)或 SQL 数据比较(用于数据更新)之类的工具。这些来自 Redgate,但它们花费了相当多的钱。它们的价格非常值得,而且我合作过的大多数公司都乐于为许可证付费。但是,您可能不想亲自为他们掏腰包。要使用这些工具,您需要将它们连接到源数据库和目标数据库,然后它们会分析数据库之间的差异(原理图或数据)并生成 SQL 脚本。然后可以手动运行这些脚本,也可以通过工具本身运行这些脚本。

理想情况下,当您处理应用程序时,您应该同时生成这些脚本。这样,当需要更新您的环境时,您可以简单地运行您拥有的脚本。花时间将其包含在您的构建过程中是值得的,因此数据库脚本会包含在您的构建中。您应该编写脚本,使它们是幂等的,这意味着您可以多次运行它们并且最终结果将是相同的(数据库更新为所需的模式和数据)。

一种可能的管理方法是在您的数据库中创建一个 DBVersions 表。此表包括您的所有脚本更新。例如,您可以有如下表(这是 SQL Server 2008 方言):

CREATE TABLE [dbo].[DBVersions] ( [CaseID] [int] NOT NULL, [DateExecutedOn] [datetime] NOT NULL, CONSTRAINT [PK_DBVersions] PRIMARY KEY CLUSTERED ( [CaseID] ASC ) ) ON [PRIMARY]

CaseID 是指需要 SQL 更新的功能或错误的案例(或问题)编号。您的构建过程可以检查此表以查看脚本是否已运行。如果没有,它会运行它。如果您无法以允许它们多次运行的方式编写脚本,这将非常有用。如果您的所有脚本都可以无限次运行,那么这个表并不是绝对必要的,尽管它仍然可以减少每次部署完成时运行大量脚本的需要。

以下是 Redgate 工具的链接。那里可能还有许多其他工具,但我在这些方面有很好的经验。

http://www.red-gate.com/products/sql-development/sql-compare/

http://www.red-gate.com/products/sql-development/sql-data-compare/

于 2013-07-20T14:03:16.847 回答