2014-09-22 18 views
2

如何使用EF6重新創建數據庫?數據庫沒有在第一時間創建

我已經嘗試了以下兩篇文章,但是,我不知道爲什麼它不工作,並得到相同的錯誤。

  1. How do I generate an EF6 database with migrations enabled, without using update-database?
  2. Migrations is enabled for context ''but the database does not exist or contains no mapped tables

我已經出版了我的Web服務器上的樣品。我正在使用Sql Server 2012 Express DBMS。

當我創建我的應用程序並將它發佈到Web服務器上時,它工作正常。它已經自動創建了數據庫。之後,我對ApplicationDBContext進行了一些更改,並在IdentityModes(ApplicationUser)中添加了一些屬性。然後我已經遷移了我的本地IIS Express上的數據庫,它工作正常。然後我試圖再次在Web服務器上發佈我的示例,但這次它顯示錯誤。

Migrations is enabled for context 'ApplicationDbContext' but the database does 
not exist or contains no mapped tables. Use Migrations to create the database 
and its tables, for example by running the 'Update-Database' command from the 
Package Manager Console. 

我已經刪除了Web服務器上的數據庫,然後再次嘗試。但是,我仍然面臨同樣的錯誤。現在,有一個沒有表的空數據庫。

應用程序正在用戶註冊中創建數據庫。

我也看過這post,並試圖打電話dbContext.Database.Initialize(true);((IObjectContextAdapter)myContext).ObjectContext.CreateDatabase()方法,但是,它仍然無法正常工作。

回答

3

首先,自動遷移對於開發來說很不錯,但它在生產中依賴於它們是一個很不好的主意。其次,在某些時候,您關閉了自動遷移,這就是爲什麼您的生產數據庫不再具有在其中創建的表的原因。

繼續並關閉自動遷移;即使在開發過程中,通過生成遷移,查看將要執行的代碼,然後運行Update-Database來應用這些更改,最好確切地知道您對數據庫做了哪些更改。

在將模式更新轉化爲生產方面,您有很多選擇,但它們都歸結爲大致相同的過程。

  1. 針對本地數據庫生成新的遷移。
  2. 如果要通過SQL更新生產數據庫,請運行Update-Database -Script。這將生成一個SQL文件,並在數據庫上運行代碼以遷移模式。如果您有DBA,請將其交給DBA,或者親自查看SQL代碼,然後通過Management Studio將其手動應用到數據庫。
  3. 運行Update-Database。這次沒有-Script對本地數據庫模式進行更改。
  4. 如果您在步驟2中未生成SQL文件,請在Visual Studio中的SQL Server對象資源管理器中查看您的本地數據庫。右鍵單擊本地數據庫,然後選擇「Schema Compare ...」。按照嚮導與生產數據庫進行比較。最後,您可以生成一個需要進行必要更改的SQL文件(如果您有DBA,那麼您可以將其更改),也可以直接從Visual Studio遷移到生產環境。但是,這並不是真的建議。生成SQL是最好的,您或您的DBA可以在實時應用更改之前檢查這些SQL。
+1

謝謝克里斯,現在,它的工作國王。當啓用「遷移」功能時,數據庫不會被創建。所以,我已經從項目中刪除了'Migration'文件夾,並從數據庫中刪除了'_MigrationHistory'表格,然後我再次發佈了它。然後再試一次,它像魔術一樣工作。再次感謝克里斯我試圖解決它自2天以來。 – Shell 2014-09-23 03:22:36

2

克里斯普拉特是正確的順便說一句。

我已經下載在我需要只是運行「更新,數據庫

下面的一個項目是快速截圖

enter image description here

在Visual Studio中的底部

然後

PM> Update-Database 

DONE