實體框架7遷移不創建表

asp.net-core c# entity-framework-core

我正在使用Entity Framework 7處理我的第一個項目,並且正在連接到已經創建了數據庫的SQL Server,但其中還沒有表。我創建了我的DbContext並創建了一個類,然後在我的上下文中設置了一個DbSet<> 。我運行命令以啟用遷移並創建第一次遷移,然後使用rand命令更新數據庫。一切看起來都很好,沒有出現錯誤,但是當我查看數據庫時,只創建了EFMigraitonsHistory表。當我查看為初始遷移創建的類時,它基本上是空白的。我究竟做錯了什麼?

我正在運行的命令:

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

語境:

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

表類:

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

Startup.cs:

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

初始遷移類(由EF自動生成):

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

編輯:在做了Poke的建議後,這是我新的自動生成的遷移。但是,該表仍未在數據庫級別創建。

dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update

一般承認的答案

您需要首先在數據庫上下文中設置實體。至少,您需要這樣做:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<NavigationMenu>();
}

您的項目佈局中隱藏了遷移問題。所以你擁有的是一個包含實體和數據庫上下文的JobSight.DAL項目。然後你有一個項目JobSight.WebUI ,這是一個實際的ASP項目,包含帶有數據庫設置的Startup.cs

這會導致問題,因為默認情況下,EF只會假設查找當前程序集中的所有內容。因此,如果要從Web項目啟動ef命令,即使上下文位於另一個項目中,它也會在那裡創建遷移。但是,當您嘗試應用遷移時,EF將無法找到它,因為它只會查看上下文的項目。

因此,要解決此問題,您需要在DAL項目中創建遷移。您可以通過在調用ef命令時指定項目來執行此操作:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<NavigationMenu>();
}

您可以通過之後運行dnx ef migrations list來驗證這dnx ef migrations list 。現在應該返回Example遷移;以前,該命令沒有返回任何內容:它無法找到遷移,這就是update命令僅表示Done (未應用遷移)並且未創建數據庫的原因。因此,如果您現在可以在那裡進行遷移,則可以使用以下方法應用它:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<NavigationMenu>();
}

請注意,由於現在在DAL項目中創建了遷移,因此需要在那裡添加對EntityFramework.MicrosoftSqlServer的引用,否則項目將無法編譯。您需要先執行此操作,然後才能運行上面的list命令。

最後,有關此問題的更多信息,請參閱此問題


熱門答案

雖然這不是原始問題的答案,但我在這裡發布我的答案,因為它可能會幫助有類似問題的人。我的問題還在於沒有創建表,但是dotnet ef migrations add InitialCreate確實在Migrations文件夾中創建了3.cs文件。但dotnet ef database update僅創建了MigrationsHistory表,而dotnet ef migrations list未返回任何遷移。

原來,問題是Visual Studio項目中排除了Migrations文件夾。一旦我再次包含它,一切都運行良好。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因