14

ASP.NET MVCを学習しようとしているので、asp.netWebサイトのミュージックストアチュートリアルに従っています。

私は、Album.csをモデルクラスとして使用し、MusicStoreEntities.csをデータコンテキストクラスとして使用してStoreManagerControllerを作成する部分にいます。

コントローラを作成するときのエラーは次のとおりです。「MvcMusicStore.Models.Album」のメタデータを取得できません。同じDbCompiledModelを使用して、異なるタイプのデータベースサーバーに対してコンテキストを作成することはサポートされていません。代わりに、使用されているサーバーのタイプごとに個別のDbCompiledModelを作成してください。

2つの異なるデータベースを使用しているように聞こえますが、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との互換性の問題ですか?

4

8 に答える 8

19

問題は、チュートリアルで使用されるデータベースの CE エディションを使用することにあります。SQL Server 2012 などの他の DB バージョンに切り替えたところ、うまくいきました。これを試して:

この接続文字列を変更します

<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" />
于 2012-11-14T10:05:38.903 に答える
8

MVC4のAdd Controller の複製が機能せずMVC4 Scaffolding Add Controller で「メタデータを取得できません...」というエラーが発生する

接続文字列にコメントを付けて、コントローラーを作成するときにデフォルトを使用してみてください。

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=MvcMusicStore;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcMusicStore.mdf" providerName="System.Data.SqlClient" />

作成後、接続文字列を返します。

于 2012-09-08T21:05:57.160 に答える
3

派生コンテキストクラスでは、この問題を抱えているほとんどの人にとって混乱の原因と思われる接続文字列名ではなく、データベース名をベースコンストラクターに渡す必要があるため、接続文字列を使用する場合

注: MvcMusicStore.sdf の前のバックスラッシュも、必要かどうかわからないので削除しました

あなたは派生コンテキストクラスであり、次のように定義する必要があります

public class MusicStoreContext : DbContext 

{ public MusicStoreContext() : base("MvcMusicStore") { }...

これが私と同じように、あなたや他の人にとってもうまくいくことを願っています.

于 2013-01-29T07:11:10.527 に答える
2

回避策を見つけたと思います。新しいコントローラーを生成する前に、Web.config から接続文字列を削除します。これにより、エラーなしでコントローラーを生成できます。次に、接続文字列を元に戻します。これにより、アプリケーションを実行できるようになります。

私は SQL CE4 を使用していますが、DbContext の明示的なコンストラクターがありません (上記の例を使用する MusicStoreEntities)。私の接続文字列は DbContext クラス名と一致します。

于 2012-11-25T19:54:24.983 に答える
2

はい、そのような簡単な修正!!..接続文字列を削除し、コントローラーが作成されてプロジェクトをビルドした後に貼り付けます。サーバー エクスプローラーのデータ接続は必要ありません。App_Data SHOW_ALL では、ビルドと最初のデバッグの実行後に .sdf ファイルのタイプが作成されます。これは、SQL DB ではなくファイルとして Web Hostsite にロードされます。

于 2013-10-22T15:22:51.987 に答える
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"/>
于 2013-09-24T23:35:05.203 に答える
1

また、ここでこの例に従っています: Accessing Your Models Data from a Controller。そこに太字でマークされていますが、一目でその上を飛ぶことができました。

「コントローラーの追加」ウィザードにモデルと DBContext を表示するには、ソリューションをビルドするだけで済みます。

于 2013-08-06T20:27:29.887 に答える
0

接続文字列の削除も機能しました。コントローラーが作成された後に貼り付けてプロジェクトをビルドするだけです

于 2013-02-15T08:27:13.523 に答える