4

我試圖生成一個完整的SQL腳本來第一次部署我的應用程序。我知道,從包管理器控制檯命令是爲了建立一個完整的SQL腳本(參見this SO question從EF 6代碼優先遷移和多重配置生成完整的SQL腳本

Update-Database -Script -SourceMigration:0 

我也讀到$InitialDatabase應該是工作,而不是「0」爲源遷移。

但是,我在我的migrations文件夾中有兩個配置。我使用下面的語法:

Update-Database -Script -SourceMigration:0 -ConfigurationTypeName MyConfig 

我回來了一個空的腳本爲我的所有配置。

請注意,我已啓用自動遷移功能,並未向其添加任何明確的遷移。

回答

1

在同一名稱空間中有兩個遷移配置是不受支持的方案。我們最近關閉a bug similar to this爲「按設計」。解決方法是將您的遷移配置放在單獨的名稱空間中。

最可靠的解決這個問題將只是把你的配置在不同的文件夾,並使用MigrationsDirectory變量,如下圖所示,然後配置產生任何明確的遷移應該放在同一個文件夾

internal sealed class Configuration : DbMigrationsConfiguration<TestMultipleMigrationsScript.BlogContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
     MigrationsDirectory = @"directory"; 
    } 

} 
+1

它們位於不同的名稱空間中(如果這一點很重要的話,它們就是不同程序集中的實際上下文類)。我可以在包管理器中使用「update-database」,它的工作原理完美無瑕。它只是不生成SQL代碼(我的解決方法是僅使用SSMS導出DDL。) –

+0

即使它們位於同一目錄中,也應該支持兩種遷移配置具有不同名稱空間的情況。如果您可以重新制作這種情況,您是否可以在entityframework.Codeplex.com上記錄一個錯誤?我編輯了我的解決方案,上面有一些示例代碼,用於指定MigrationsDirectory,這是推薦的每種解決方案具有多個遷移上下文的方式。 – lukew

+0

正如我所說的,直接從框架管理器更新數據庫完美工作。這只是沒有生成的SQL腳本。 –