迁移.exe,在生成服务器上,希望通过迁移“重新开始”
本文关键字:迁移 重新开始 希望 服务器 exe | 更新日期: 2023-09-27 18:34:09
我们自动生成过程的一部分涉及运行迁移.exe将测试数据库更新到最新版本的数据库。
过程相对简单:
- 将迁移.exe复制到正在编译的项目的/bin 文件夹中
- 使用连接字符串(指定为生成定义的一部分(执行迁移.exe。
第二步(显然已编辑(的一个例子是:
migrate.exe Company.Data.dll /connectionString="Server=...;Database=...;User Id=...;Password=..."
/connectionProviderName="System.Data.SqlClient"
其中 Company.Data.dll 是在生成服务器上编译的项目的刚生成输出。
这个过程已经实施了几个月,并且一直运行良好。直到今天。
今天,当上述命令运行时,迁移.exe尝试运行所有迁移 - 从头开始 - 而不仅仅是添加的新迁移。这显然会失败,因为它尝试创建数据库中已存在的表。无论是否确实存在挂起的迁移,都会出现问题。
我已经确认日志文件中显示的连接字符串指向的数据库是正确的数据库,并且它在__MigrationHistory表中具有所有适当的条目,这些条目应该会导致迁移只输入缺少的内容。
如果我从源代码管理中提取代码,构建它并运行迁移.exe我自己在本地(使用相同的连接字符串(,它会适当地运行(最初只运行它应该的迁移,然后在随后的尝试中说没有挂起的显式迁移(。
在我看来,只要连接字符串指向正确的数据库,并且用于 EF 的 DbContext 派生类的名称与__MigrationHistory表中的名称匹配,迁移.exe应该能够找到条目而不是运行这些迁移。
我还缺少什么我应该看的?
更新:我刚刚在指向同一服务器上的不同数据库时发生了这种情况。相同的"解决方法"(在本地运行迁移.exe(。有趣的是,当指向不同的数据库时,它以完全相同的方式发生。
我有解决方案,我遇到了同样的问题。事实证明,这是一个SQL权限问题。生成服务器服务用户需要读/写和 ddladmin 权限才能进行迁移。在我的情况下,dba 已将服务用户的权限更改为仅 ddladmin,但迁移过程需要读取和写入迁移历史记录表。由于它无法读取迁移历史记录,因此它假定需要应用所有迁移。这是我的帐户和构建服务帐户之间的不同权限。希望这对某人有所帮助。