21

私はMicrosoftのチュートリアルからASP.NETMVCを学んでいます:

http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/accessing-your-model's- https://stackoverflow.com/editing-helpdata-from-a- _コントローラ

上記のリンクで、「MoviesController」という名前のコントローラーを追加しているときに、このエラーが発生します

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

どうすれば修正できますか?

4

13 に答える 13

25

同じ問題がありました。

で切り替えproviderName="System.Data.SqlServerCe.4.0"providerName="System.Data.SqlClient"ところ、コントローラーとビューが作成されました。

私はこれを見つけました: http://msdn.microsoft.com/en-US/library/ms171861.aspx

指示に従い、SQL Server Compact への参照を追加しましたが、それでも機能しません。

また、デフォルトの SQL Server Express 接続をコメントアウトしようとしましたが、コントローラーを追加しようとすると同じエラーが発生しました。

SQL Server Express を使用するだけです。何か問題があればお知らせします。

于 2012-09-19T22:00:58.990 に答える
6

次の作品を使用していることがわかりました:(SQLServerExpress以降がインストールされていると仮定します)

 <add name="MovieDBContext" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;AttachDBFilename=|DataDirectory|MovieDB.sdf"/>
于 2012-11-28T01:55:31.017 に答える
2

このエラーの理由は、VS がスキャフォールディング中に既存の DBContext を再利用するのが難しいためだと思います。VS は、DBContext のプロパティをドメインの類似した名前で使用しようとします (「s」を連結したドメイン名を試みるなど)。プロパティが見つからず、コンテキストにドメイン クラスの DBSet が既にある場合は、そのエラーが生成されます。

私の解決策は、「DeleteContext」という名前の新しい DBContext を作成することでした。コントローラーとビューを正常に作成した後、コントローラーの「DeleteContext」を既存のものに置き換えました。最後に、「DeleteContext」クラスを削除しました。

それは本当にうまくいきます。

于 2014-03-31T00:44:06.090 に答える
1

Visual Studio 2012( http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-5)を使用しているときに、別のMicrosoftASP.NETMVCチュートリアルで同じエラーが発生しました。 。チュートリアルを完了するために、SQLCEの代わりにSQLExpressを使用する方が簡単であると判断しました。

この問題を解決するために私がしたことは、サーバーエクスプローラーからMvcMusicStore.sdfを削除してから、ソリューションエクスプローラーのApp_Dataから同じデータベースファイルを削除することでした。

Web.configの接続文字列セクションを更新して、SQL CE(.sdf)の代わりにSQL Expressデータベース(.mdf)を使用するようにしました。この特定のチュートリアルでMusicStoreEntitiesは、は拡張するクラスの名前ですDbContext

<connectionStrings>
    <add name="MusicStoreEntities" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\MvcMusicStore.mdf;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>

ソリューションを構築し、サイトを実行すると、データベースが再生成されました。データベースファイルをソリューションに戻すには、ソリューションエクスプローラーの[すべてのファイルを表示]ボタンをクリックし、App_Dataの.mdfファイルを右クリックして、[プロジェクトに含める]を選択します。

于 2013-02-14T20:04:02.463 に答える
1

その解決策は私にとってはうまくいきませんでした。return View(db.Movies.ToList());

代わりにこれを使用してください:

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

この:

public class MovieDBContext : DbContext
{
   public MovieDBContext() : base("Movie") { }
   public DbSet<Movie> Movies { get; set; }
} 
于 2012-09-20T16:06:55.250 に答える
1

こんにちは、私にとってうまくいった解決策が1つあります。Web.config で、チュートリアルでは、connectionStringsセクションに次の行を追加するように指示されました。

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

削除したり変更したりしないでください。

新しいコントローラーを追加するときは、これを作成して、表示されているエラーを回避できます。

  1. 上の行をコメントしてください。
  2. 次の行を追加します。 <'add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlClient"/>
  3. ソリューションを保存します
  4. コントローラーを追加する
  5. アプリを実行する前に、コメントした行のコメントを解除し (1)、追加した行 ( ) をコメントにしますproviderName="System.Data.SqlClient"(2)。

コントローラーを追加するとき、これは私にとって非常にうまくいきました。

これがあなたを助けることを願っています。

于 2013-05-14T02:45:20.573 に答える
0

VS 2012を使用している場合は、localDbの代わりにSQLCompactを使用するようにEFに指示する必要もあります。

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
  <parameters>
    <parameter value="System.Data.SqlServerCe.4.0" />
  </parameters>
</defaultConnectionFactory>

より簡単な方法は、 EF SQLCompactNugetパッケージをインストールすることです。

詳細については、このブログエントリを確認してください。

于 2013-02-01T06:02:30.343 に答える
0

Contoso University の asp.net MVC チュートリアルに取り組んでいるときに、この同じ問題に遭遇しました。問題は、SQL Server Compact 接続文字列とメンバーシップ プロバイダーの Sql Server 接続が混在していることに起因しているようです。

最初に hyperGeoMetric の修正プログラムを使用しましたが、うまくいきました。次に、ダウンロード可能なコードの web.config を調べたところ、追加の構成がいくつかあることに気付きました。

entityFramework のデフォルト パラメータを追加/置換すると、次のようになります。

<parameters>
        <parameter value="Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True" />
</parameters>

次のような system.data セクションを追加します。

<system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>

既存の (デフォルトの) DefaultConnection を次のように変更します。

<add name="DefaultConnection" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|aspnet-membership.sdf" />

これらの変更の後、Sql Server Compact エディションを使用してチュートリアルを続けることができました。

サム

于 2013-02-05T08:09:07.837 に答える
0

少しだけ試してみたところ、問題が見つかりました。

チュートリアルでは、web.config に次の行を追加しています。

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

問題があるようです..コメントアウトしてSqlServerを使用したところ、うまくいきました。それでも SqlServerCe を使用したい場合は、その問題を解決する方法を確認する必要があります。

于 2012-09-14T07:58:06.593 に答える
0

私はこのチュートリアルを学んでいます: http://mvcmusicstore.codeplex.com/。同じエラーが発生しました。NuGet パッケージの一覧に "EntityFramework.SqlServerCompact" という項目名を見つけてインストールしたところ、問題なく動作しました。パッケージに依存するエンティティ フレームワークに注意してください。ここですべてのバージョンを表示できます: https://www.nuget.org/packages/EntityFramework.SqlServerCompact。幸運を!

于 2015-08-09T02:40:42.097 に答える
0

私もそのチュートリアルに従いましたが、同じ問題が発生しました。接続文字列を削除すると、コントローラーを追加でき、他のファイルが作成されました。次に、同じ接続文字列を Web.config ファイルに再度追加し、以前と同じ場所に正確に挿入しました。それは私の問題を解決しました。

于 2015-04-28T21:39:06.117 に答える
-1

別のソリューションで同じ問題に遭遇しました。UsersContextこれは、デフォルトクラスに含まれているような、基本コンストラクターへのパラメーター化された呼び出しを導入した直後に表示されました。

これは失敗します

public class MovieDBContext : DbContext
{
  public MovieDBContext() : base("DefaultConnection")
  {
  }

  ...
}

これは機能します

public class MovieDBContext : DbContext
{
  // No constructor here
  ...
}

コンストラクターで接続文字列に名前を付けるとエラーが発生するようです。web.config には接続文字列が 1 つしかないためDefaultConnection、明示的に名前を付けていませんが、引き続き使用されます。

于 2012-10-15T18:14:41.523 に答える