2012-09-07 103 views
14

我在學習ASP.NET MVC,因此我正在關注asp.net網站上的音樂商店教程。在Visual Studio 2012中創建控制器時出錯

我在使用Album.cs創建StoreManagerController作爲模型類和MusicStoreEntities.cs作爲數據上下文類的部分。

創建控制器時出錯:無法檢索'MvcMusicStore.Models.Album'的元數據。不支持使用相同的DbCompiledModel針對不同類型的數據庫服務器創建上下文。相反,爲每種正在使用的服務器創建一個單獨的DbCompiledModel。

聽起來像我使用兩個不同的數據庫,但這裏是我的Web.config文件的連接字符串部分:

<connectionStrings> 
<add name="MusicStoreEntities" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|\MvcMusicStore.sdf"/> 
</connectionStrings> 

奇怪的是,如果我註釋掉MusicStoreEntities連接字符串,然後嘗試創建它工作的StoreManagerController。如果我將解決方案設置中的目標框架更改爲.NET Framework 4,在Visual Studio 2010中打開解決方案,然後創建控制器,它也可以工作。

那麼這是Visual Studio 2012或連接字符串的問題嗎?也許與CE4.0和VS2012有一些兼容性問題?

回答

19

問題在於使用教程中使用的CE版數據庫。當切換到像SQL Server 2012這樣的其他數據庫版本時,它對我來說效果很好。試試這個:

更改此連接字符串

<add name="MusicStoreEntities" connectionString="Data Source=|DataDirectory|MvcMusicStore.sdf" providerName="System.Data.SqlServerCe.4.0"/> 

隨着

<add name="MusicStoreEntities" connectionString="Data Source=DBInstanceName;Initial Catalog=MvcMusicStore;Integrated Security=True" providerName="System.Data.SqlClient" /> 
+0

太棒了,爲我節省了很多時間,謝謝! – casaout

+1

感謝casaout,很高興幫助:) – Nexus23

2

我想我找到了一個解決方法。在生成新的控制器之前,從Web.config中刪除連接字符串。這將允許您無誤地生成控制器。然後放回連接字符串。這將允許您運行該應用程序。

我正在使用SQL CE4,而我沒有DbContext(MusicStoreEntities使用上面的示例)的顯式構造函數。我的連接字符串匹配DbContext類名稱。

3

在派生上下文類,你需要將數據庫名傳遞給基類的構造,而不是這似乎是混亂的具有這個問題,讓你的情況與連接字符串多數人源的連接字符串名稱

注意:還要在MvcMusicStore之前刪除反斜槓。SDF不肯定這是必要

你導出的上下文類應定義爲

public class MusicStoreContext : DbContext 

{ 公共MusicStoreContext():基地( 「MvcMusicStore」){} ...

希望這適用於你和其他人,因爲它適合我。

0

刪除連接字符串還爲我工作,只是將其粘貼回控制器已被創建後,並建立項目

1

我也剛纔下面這個例子在這裏:Accessing Your Models Data from a Controller。這裏有大膽的標記,但我可以乍看之下飛過它:

您只需構建解決方案即可使模型和DBContext顯示在「添加控制器」嚮導中!

+0

您的解決方案如何與此問題相關? – ZoomIn

+0

@ZoomIn其實我有類似的問題,似乎有關。本教程的最後一步是提到添加連接字符串......構建項目使VS能夠將新創建的DBContext類型包含到它們的嚮導中...... – Kjellski

1

這可能更容易閱讀...... 問題是,本教程的連接字符串缺少sdf文件名前面的「/」。

不好:

<add name="MusicStoreEntities" 
connectionString="Data Source=|DataDirectory|MvcMusicStore.sdf" 
providerName="System.Data.SqlServerCe.4.0"/> 

好:

<add name="MusicStoreEntities" 
connectionString="Data Source=|DataDirectory|/MvcMusicStore.sdf" 
providerName="System.Data.SqlServerCe.4.0"/> 
2

是,這樣一個簡單的解決!!刪除連接字符串,並將其粘貼回控制器已經被創建後和建設項目。服務器資源管理器數據連接不是必需的。在App_Data SHOW_ALL中,構建和第一次調試運行後會創建一個類型的.sdf文件。這將作爲文件加載到Web主機上,而不是SQL DB。

相關問題