2014-01-08 233 views
8

在我的MVC的Web应用程序,我添加了名为能力与现有的模型一个模型,并没有增加,迁移和更新数据库,它工作正常,然后我创建基于该模型的控制器,这是OK,“找不到对象‘dbo.xxxx’,因为它不存在或您没有权限。”,

但之后,我意识到错了,所以我删除了控制器和它的意见与模型,我也删除来自Server Exploler的表,并创建了一个名为CompetencyLabel的新模型,并运行add-migration,它工作正常,但是当我运行update-database时,在PM>窗口中出现此错误。

“找不到对象‘dbo.Competencies’,因为它不存在或您没有权限。”,

该表已被删除,我不知道为什么它仍然问我吧,确实任何人都知道如何使它工作?非常感谢,

+0

作者:“run update-database”你的意思是更新你的EDMX? – Goose

+0

这是asp.net MVC网络应用程序,我首先使用EF代码,所以当模型每次更改时,我必须在Package Management Consol(PM)中运行该代码,请让我知道你是否有更多问题,谢谢 – user2949042

+0

试试在SQL中创建虚拟Competencies表,然后运行update-database,为PMC提供删除表的机会。另外,将-verbose添加到update-database命令以查看它试图对Competencies表执行的操作 – Sparky

回答

10

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

  • Up() - 定义采取的行动,当我们正在升级使用Update-Database
  • Down()数据库 - 定义动作的时候,我们要降级使用Update-Database
  • 数据库取

由于您删除了能力模型,最新的迁移将代码添加到Up()方法中,该方法销毁Competencies表上的索引并删除表。正如您手动完成的那样,只需删除对其负责的代码即可。Update-Database。它应该升级它没有问题。

+0

非常感谢#krzychu。 –

2

我发现了另一个答案这个问题。

我的情况是,我改变了我的实体的变化(变化关系和entitites名)。当我跑更新数据库-verbose我发现它运行的一些功能与“EntityHistory”,但实体didnt存在了,因为我改变了它的名称为“AnotherEntityHistory”。然后,结果我得到了“找不到对象‘dbo.EntityHistory’,因为它不存在或您没有权限”。

我所做的是再次将AnotherEntityHistory重命名为EntityHistory,运行Update-database(因为它现在具有“缺失”实体EntityHistory,所以一切都会好的),再次将EntityHistory重命名为AnotherEntityHistory并再次运行update-database。

你会看到现在它只有重命名,而不是重命名表,删除索引等表....

这样你不删除任何表或迁移值。

2

正如你所删除/修改数据库内容应用Add-Migration后,做之前手动Update-Database我想在这里产生错误)

  • 从迁移文件夹删除相应的迁移文件作为其应用不正确 使用Update-Database –TargetMigration: OldMigration恢复先前的迁移或删除生成的数据库或需要清除数据库表中的旧迁移记录
  • 从NPM代码首次迁移中应用迁移Add-Migration
  • Add-Migration命令

解决您的问题,执行数据库更新。

1

删除您在迁移文件夹中手动添加的所有移民类别(通过附加转移命令)键入此命令add-migration MigrationName -ProjectName YourProjectName

如果每一件事情正常工作,你应该可以看到在新创建的迁移类的最多的方法下面的代码

DropTable("dbo.Competencies"); CreateTable("dbo.CompetencyLabel");

然后运行这个命令update-database -verbose -ProjectName YourProjectName

编码快乐

3

当您收到此错误时,请尝试按顺序排列您的Up()声明。例如, Before Rearrangement

当你看到上面的图片,你意识到,在Users表在开始和下一行改名,生成SQL语句来删除在Users表的外键,但到实体框架,该表(即Users表)不再存在,因此它将引发错误。

重新排列语句,以便当Users表重新命名时,不会再次调用它。一个例子见下图。 After Rearrangement

+0

作品很有魅力,谢谢! –

+0

不客气。 :-) –

相关问题