"无法找到对象"dbo.xxxx"因为它不存在或您没有权限."

use*_*042 13 ef-migrations

在我的MVC Web应用程序,我添加了一个名为model 竞争力,以现有的模式,并没有add-migrationupdate-database,它工作得很好,然后我创建了基于该模型的控制,这是确定.

但在那之后,我意识到出了问题,所以我用模型删除了控制器及其视图.我也从Server Explorer中删除了表,并创建了一个名为CompetencyLabel的新模型,然后运行add-migration,它工作正常,但是当我运行时update-database,我在PM> window中遇到了这个错误:

"找不到对象"dbo.Competencies",因为它不存在或者您没有权限."

该表已被删除,我不知道为什么它仍然会问我.有人知道如何使它工作吗?非常感谢.

Alf*_*Moh 17

当您收到此错误时,请尝试Up()按顺序排列您的语句.例如, 在重新安排之前

当您查看上面的图像时,您意识到,Users表在开头和下一行重命名,生成一个SQL语句来删除Users表中的外键,但是删除到Entity Framework,即表(即Users表) )不再存在,所以它会抛出一个错误.

重新排列语句,以便在Users重命名表时,不会再次调用它.下图中显示了一个示例. 重新安排后

  • 为什么 EF 会这样做呢?我从未告诉它以这种方式重命名表,它仍然尝试这样做并弄乱了迁移! (3认同)

krz*_*chu 10

输入Enable-Migrations命令时,将Migrations在项目中创建一个文件夹.无论何时Add-Migration,都会在该文件夹中创建新的迁移文件.在该文件中,定义了两种方法:

  • Up() - 定义在使用时升级数据库时要采取的操作 Update-Database
  • Down() - 定义在使用降级数据库时要采取的操作 Update-Database

当您删除了Competencies模型时,最新的迁移会向该Up()方法添加代码,该代码会销毁Competencies表中的索引并删除该表.正如您手动完成的那样,只需删除负责它的代码即可Update-Database.它应该没有问题地升级它.


Wil*_*ted 6

即使您重新完成了项目的迁移,EF 仍然会记住架构更改。

我们在项目早期遇到了类似的问题,我们通过从数据库中删除 _MigrationHistory 表然后重新生成迁移来修复它。