2017-10-10 165 views
0

我正嘗試在buildserver上執行代碼第一次遷移的數據庫更新。Migration.exe -connectionString參數無法在CI服務器上執行EF遷移

我讀了關於從EF 6工具中使用migration.exe,並傳遞misc。上下文和連接設置作爲migration.exe調用的參數。

我希望能夠直接將連接字符串,默認目錄和安全性指定爲參數。

問題是,當我指定了我的連接字符串時,如: migrate.exe Ef.Data.DLL/ConnectionString:「Data Source = myserver; Initial Catalog = MyCatalog; Integrated Security = true」/ connectionProviderName:System .Data.SqlClient /詳細

然後migrate.exe將拋出和錯誤信息:System.InvalidOperationException:沒有名爲「MyContext」連接字符串可能會在應用程序配置文件

我的背景是一樣的代碼定義中找到: public MyContext() :base(「name = MyContext」)

所以它期望一個「MyContext」連接字符串,就像它仍然試圖使用App.Config或web.config一樣,但它不應該導致我將這些信息作爲參數傳遞。

如果我嘗試指定一個ConnectionStringName作爲參數(-connectionStringName:MyContext)沿其他參數。我得到:錯誤:只能指定/ connectionStringName或/ connectionString中的一個。

所以我很困在這裏。不能解決這個問題。任何想法都非常感謝。

+0

嘗試添加提供者作爲參數以及:'/ connectionProviderName:「System.Data.SqlClient」' –

+0

它的所有已存在並沒有幫助。 –

回答

1

今天我有同樣的問題。對我來說,它是通過改變我的上下文構造排序,從這個:

public RootContext() : base("name=MyContext") 

這樣:

public RootContext() : this("MyContext") 

有上下文名稱前面的name=價值中找到否則它會引發錯誤。如果僅從Visual Studio進行部署,這非常棒,因爲如果字符串不匹配,它將有助於引發錯誤,但在嘗試通過命令行在不同環境中自動執行遷移時不會太好。所以,如果你做了這個改變,在VS中運行你的遷移時要小心 - 如果你的字符串不匹配,它會繼續愉快地繼續,並在LocalDB中創建一個名爲「MyContext」的新數據庫,而不會告訴你它是什麼沒有!