2017-05-08 88 views
1

我正在使用實體框架以及代碼優先遷移更新我的數據庫的項目。我在另一臺機器上開始了這個項目,結果非常好。現在我檢查了另一臺機器上的代碼。由於這臺機器沒有數據庫,我在nuget中運行了update-database命令。它應該應用我以前的遷移並在此機器上創建一個新的數據庫,但它顯示以下錯誤。實體框架:無法更改代碼優先遷移的數據源

error

我讀this MSDN文章它說

如果本地SQL Express實例是可用的,那麼代碼首先創建了數據庫,該實例 如果(默認情況下在Visual Studio 2010中安裝) SQL Express不可用,則Code First將嘗試使用LocalDb(默認情況下安裝Visual Studio 2012)

rstand是因爲當我在第一臺機器上啓用了遷移時,它創建了SQLEXPRESS實例作爲DataSource的數據庫,並且由於我目前的機器中沒有該數據庫,因此無法創建數據庫。所以我試圖將EntityFramework的DataSource更改爲我當前使用的LAPTOP-HD618J49的sql server的實例。爲此,我嘗試在app.config中編寫一個帶有此實例的硬編碼連接字符串,在Data Context類中更改了ContextName,但無濟於事。請給我一些關於我可能錯過的指示?

+0

我建議你在你的上下文的構造函數中指定一個連接字符串名,如[這裏]所述(http://www.entityframeworktutorial.net/code-first/database-initialization-in-code-first.aspx) 。然後將該連接字符串添加到您的配置文件。應該不需要更改上下文的名稱。 –

+0

@SteveGreene我也嘗試過。還是一樣的錯誤。 –

+0

首先要做的是使用VS(或SQL Management Studio)中的SQL Server對象瀏覽器連接到所需的數據庫並確保您有權訪問(默認情況下,您無權訪問遠程數據庫)。其次,你的錯誤信息是否仍然指'。\ SQLEXPRESS'?這表明它沒有使用LAPTOP-HD618J49的連接字符串。 –

回答

0

我終於解決了這個問題。早些時候,我嘗試使用base("name=ConnectionStringNameHere"),但在包管理器控制檯中運行update-database命令時,它不起作用。奇怪的原因是Visual Studio不知道哪個app.config檢查ConnectionStringName。儘管我已經在包管理器控制檯的下拉列表中選擇了具有實體框架的模塊。我必須從解決方案資源管理器窗口中選擇具有實體框架的模塊並將其設置爲啓動項目。這不知何故解決了這個問題,它能夠從更新的數據源的模塊的app.config中選擇ConnectionStringName。