2014-01-08 124 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

不客氣。 :-) –

相關問題