有一個突破性的變化,所以我們決定重置遷移,但現在如果我們不把-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();
}
}
我們有CreateDatabaseIfNotExist初始值設定項。我是EF和遷移新手,看着一些微軟教程,他們刪除了整個文件夾,這就是我們爲什麼要這樣做的原因。此外,這是多少地方建議重置遷移。如何在使用CreateDatabaseIfNotExist initliazer時設置MigrateDatabaseToLatestVersion? – Dzyann
你不需要兩個。 MigrateDatabaseToLatestVersion將創建數據庫(如果該數據庫不存在),只要您具有該基準初始遷移即可。把它放在上下文的靜態構造函數中。 –
嗨史蒂夫,我添加了我的DbContext構造函數和初始化器到我的文章。我們之前有過這樣的事情,並沒有重新設置EF遷移的問題。現在突然間不再工作了。 – Dzyann