gpt4 book ai didi

c# - 构建服务器上的 migrate.exe 想要 "start over"进行迁移

转载 作者:行者123 更新时间:2023-11-30 17:39:35 26 4
gpt4 key购买 nike

我们的部分自动化构建过程涉及运行 migrate.exe 以将测试数据库更新到最新版本的数据库。

过程比较简单:

  1. 将migrate.exe复制到正在编译的项目的/bin文件夹下
  2. 使用连接字符串(指定为构建定义的一部分)执行 migrate.exe。

第二步的一个例子(显然是经过编辑的)是:

migrate.exe Company.Data.dll /connectionString="Server=...;Database=...;User Id=...;Password=..." 
/connectionProviderName="System.Data.SqlClient"

其中 Company.Data.dll 是在生成服务器上编译的项目的刚刚生成的输出。

这个过程已经实现了几个月并且运行良好。直到今天。

今天,当上述命令运行时,migrate.exe 会尝试运行所有迁移 - 从头开始​​ - 而不仅仅是添加的新迁移。这显然失败了,因为它试图创建数据库中已经存在的表。无论是否存在挂起的迁移,都会出现问题。

我已经确认日志文件中显示的连接字符串指向的数据库是正确的,并且它在 __MigrationHistory 表中具有所有适当的条目,这些条目应该会导致迁移只输入丢失的内容。

如果我从源代码管理中提取代码,构建它并自己在本地运行 migrate.exe(使用相同的连接字符串),它会适本地运行(最初只运行它应该运行的迁移,然后在随后的尝试中说没有挂起的显式迁移)。

在我看来,只要连接字符串指向正确的数据库并且用于 EF 的 DbContext 派生类的名称与 __MigrationHistory 表中的名称相匹配,migrate.exe 就应该能够找到条目而不运行这些迁移。

还有什么我应该看的?

更新:当指向同一台服务器上的不同数据库时,我刚刚发生过这种情况。相同的“解决方法”(在本地运行 migrate.exe)。有趣的是,当指向不同的数据库时,它的发生方式完全相同。

最佳答案

我想我有解决方案,我遇到了同样的问题。原来是SQL权限问题。构建服务器服务用户需要读/写和 ddladmin 权限才能进行迁移。在我的情况下,dba 仅将服务用户的权限更改为 ddladmin,但迁移过程需要读取和写入迁移历史表。因为它无法读取迁移历史,所以它假设它需要应用所有迁移。这是我的帐户和构建服务帐户之间的不同权限。希望这对某人有所帮助。

关于c# - 构建服务器上的 migrate.exe 想要 "start over"进行迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35326171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com