2017-06-16 21 views
0

有一個突破性的變化,所以我們決定重置遷移,但現在如果我們不把-EnableAutomaticMigrations選項Enable-Migrations不起作用。 我的連接字符串位於作爲啓動項目設置的我的Web項目中。爲什麼我只啓用代碼遷移,如果還啓用自動代碼遷移?

這是我們採取的步驟:

首先我們完全刪除的文件夾遷移和數據庫。 然後當我們這樣做:

enable-migrations 

我們得到:

察看此背景下針對現有的數據庫...

無法更新數據庫,以目前的模式匹配,因爲有未決 更改和自動遷移已禁用。將未完成的 模型更改寫入基於代碼的遷移或啓用自動遷移。 將DbMigrationsConfiguration.AutomaticMigrationsEnabled設置爲true以啓用自動遷移,並且啓用 。

我不明白這個錯誤,沒有數據庫,有沒有遷移,它是什麼掛起的變化引用? (我不甚至已經掛起的混帳chanves)

如果當時我們做

enable-migrations -EnableAutomaticMigrations 

它的工作原理,但是當我們與遵循它:

Add-Migration InitialCreation 

它創建了一個空InitialCreation遷移並使用與我的模型對應的表創建數據庫。但是這樣做我們無法第一次獲得創建數據庫的腳本。我不知道發生了什麼事。 它似乎是第一次使用一些自動遷移。

爲什麼我們不能enable-migrations沒有-EnableAutomaticMigrations

更新

史蒂夫·格林交談後,我認爲這可能是添加我的DbContext的一部分有用的初始化程序

public class ApplicationDatabaseContext : DbContext 
    { 
     public ApplicationDatabaseContext() 
      : base("MyConnectionStringName") 
     { 
      Database.SetInitializer<ApplicationDatabaseContext>(new ApplicationDataInitializer()); 

      if (!Database.Exists()) 
      { 
       Database.Initialize(true); 
      } 
     } 

而且我DatabaseInitializer:

public class ApplicationDataInitializer : CreateDatabaseIfNotExists<ApplicationDatabaseContext> 
    { 
     protected override void Seed(ApplicationDatabaseContext context) 
     { 
      base.Seed(context); 

      CreateData(context); 
     } 

     private void CreateData(ApplicationDatabaseContext context) 
     { 
      //Add data here 
      context.SaveChanges(); 
     } 
    } 

回答

0

第一,請確保您已設置初始化程序MigrateDatabaseToLatestVersion。

其次,你應該不需要啓用自動遷移。要重置遷移,您不必刪除整個文件夾(特別是如果您在Configuration()類中完成了一些播種或其他自定義設置)。剛刪除的各個遷移然後添加一個新的基準遷移:

add-migration MyStartPoint -IgnoreChanges

這將拍攝快照,在向上()沒有代碼,因爲你並不真的需要生成一個腳本來創建數據庫。所以現在update-database -Script -SourceMigration $InitialDatabase應該創建一個腳本,您可以使用它來創建一個新的數據庫。

另一種選擇是使用像CreateDatabaseIfNotExist這樣的initializer,它將完成該操作。

+0

我們有CreateDatabaseIfNotExist初始值設定項。我是EF和遷移新手,看着一些微軟教程,他們刪除了整個文件夾,這就是我們爲什麼要這樣做的原因。此外,這是多少地方建議重置遷移。如何在使用CreateDatabaseIfNotExist initliazer時設置MigrateDatabaseToLatestVersion? – Dzyann

+0

你不需要兩個。 MigrateDatabaseToLatestVersion將創建數據庫(如果該數據庫不存在),只要您具有該基準初始遷移即可。把它放在上下文的靜態構造函數中。 –

+0

嗨史蒂夫,我添加了我的DbContext構造函數和初始化器到我的文章。我們之前有過這樣的事情,並沒有重新設置EF遷移的問題。現在突然間不再工作了。 – Dzyann