2016-11-30 27 views
1

在研究和跟隨遷移部分時,我完成了初始操作,然後在接下來的兩次遷移中進行跟蹤,如圖所示。在最後一次遷移時,「課程」的錯誤已經存在於數據庫中。確切的錯誤「數據庫中已經有一個名爲'Course'的對象。」我刪除了所有的遷移,並重新執行了顯示的遷移,每次都以相同的錯誤結束。.Net Core Contoso教程在遷移期間遇到數據庫中已存在的對象時出現錯誤

兩部分問題:爲什麼會出現這種類型的錯誤?以及如何完全刪除所有遷移(我的遷移文件夾爲空),以便人們可以繼續進行下一次遷移。我錯過了什麼嗎?

+0

請告知如果我的回答對你有幫助...... – dmcquiggin

回答

0

這可能是一個很大的話題,以適應單個答案。我會盡力給你一個概述,背景和建議。需要進一步閱讀才能充分理解如何使用實體框架。我將主要討論遷移問題,因爲這是您問題的主要內容。

概述

實體框架遷移提供回滾到數據庫所做的,回到那個被包含在指定遷移的數據庫的模式變化的能力;例如通過將數據庫返回到之前的模式來撤消模式更改 - 並且還將其返回到其原始狀態。

請注意,應用或回滾遷移時可能會發生數據丟失,但在您的情況下,這可能並不重要。

該命令將數據庫恢復到一個特定的遷移是:

 Update-Database -TargetMigration:"migration_name" 

的命令返回到數據庫的初始,原始狀態:

 Update-Database –TargetMigration: $InitialDatabase 

實體框架也有Database InitializationInitialization Strategies的可選概念,允許開發人員指定數據庫只應創建一次,或者每次運行應用程序時刪除並創建,具體取決於它們的Code First型號是否具有ch anged。請參考these tutorials瞭解更多數據庫初始化的深入內容。

正如你說你有你的遷移文件夾中沒有遷移的文件,讓我們繼續......

背景

當你第一次運行Enable-Migrations命令,它會創建一個使用的類用於管理後續的遷移應用。

當生成你的第一次遷移,通過執行,例如:

Add-Migration InitialCreate 

這將創建遷移文件夾,包含初始模式內的InitialCreate文件,根據您的類模型,該模型將持續由實體框架。示例名稱InitialCreate是可選的,可以是任何你想要的 - 它只是一個標籤,可以在以後參考。隨後,當您發出Add-Migration命令時,會創建進一步的遷移以應用與您的類相關的模式更改;他們將被添加到您的Migrations文件夾,但而不是尚未應用於數據庫。

然後可以通過發出Update-Database命令將遷移應用到您的數據庫。如果在沒有參數的情況下執行,數據庫模式將更新爲最新遷移定義的模式。

如果您正確遵循了Contoso的教程,你應該幾個遷移,其中一個包含單詞「初始」在它的名字,作爲公約的一部分。

諮詢

  1. 如果沒有看到這些,很可能是你沒有初始化遷移,通過發出命令Enable-Migrations

  2. 第一次執行更新數據庫後,驗證這也會創建一個名爲__MigrationHistory的數據庫表 - 它跟蹤已應用的模式版本和遷移。

  3. 您可能以錯誤順序應用遷移,現在它不符合您的類結構,或者與數據庫中的模式跟蹤不同步。

  4. 在當前的情況下,因爲你是下面的教程,它可能是最好刪除你的數據庫,並重新創建它繼微軟列出的步驟,從Enable-MigrationsAdd-MigrationUpdate-Database命令要特別注意的輸出,在每個步驟驗證數據庫模式。

REFERENCE

作爲參考,的遷移應如何利用的概述,可以發現on MSDN here.

使用遷移與MVC的漫遊可以發現here

相關問題