16

VS 2010 プレミアムを使用しています。エンティティ フレームワーク モデルで SqlCe 4.0 を使用する MVC4 プロジェクトがあります。

モデルは:

  public class ProjectBuild
    {
       public int ProjectBuildID {get;set;}
       public string name {get;set;}
    }

  public class ProjectBuildContext:DbContext
     {
       public DbSet<ProjectBuild> builds {get;set;}
     }

以下は私の接続文字列です:

 add name="ProjectBuildContext" connectionString="Data Source=|DataDirectory|DB.sdf"
 providerName="System.Data.SqlServerCe.4.0"

組み込みのスキャフォールディングを使用して新しいコントローラーを作成しようとすると、次のエラーが発生します。

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

4

11 に答える 11

28

Fontanka16 ソリューションを試しましたが、うまくいきませんでした。DbContext クラスに、ターゲット CE データベースを定義するデフォルトのコンストラクターがないことが判明しました。

これらは私の手順の要約です:

  • Nuget パッケージ EntityFramework.SqlServerCompact をインストールしました。
  • デフォルトのコンストラクターを DbContext クラスに追加しました。

    public class SchoolContext : DbContext { public Sc​​hoolContext() : base(" School ") { } ... }

  • 私の接続文字列は次のとおりです。

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

その後、うまくいきました。

于 2012-09-08T23:57:03.833 に答える
9

接続文字列の名前を DefaultConnection に戻すと、最初はデフォルトのコンストラクターを追加しようとしましたが、アセンブリが正しく参照されていないという警告が表示されました。

于 2012-10-21T09:47:14.300 に答える
6

EFとMVCを使用するのは初めてですが、データ接続を定義しない(コメントアウトする)か、web.configで名前を変更しない場合、VisualStudioでコントローラーを追加できることがわかりました。接続が定義されていない場合、EFは自動的にSQLExpressを使用します。コントローラを追加した後、接続文字列をweb.configに戻すことができ、プログラムは期待どおりに機能します。

//このソリューションはhttp://forums.asp.net/t/1838396.aspx/1?Error+while+adding+controller+class+Unable+to+retrieve+metadata+for+MvcMovie+Models+からの抜粋ですMovie +

于 2012-10-11T04:20:00.043 に答える
5

スーパークラスは常に で初期化base(string)する必要があります。connectionStringまた、Web.configの名前が、スーパー クラス コンストラクターに送信する文字列と同じではない可能性があることもわかりました。

たとえば、次のようになります。

<add name="MovieDBContext"  ....... />

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

ご覧のとおり、 は"MovidDBContect"とは異なり"Movie"ます。

于 2013-01-11T22:15:17.293 に答える
2

それが誰かに役立つ場合のメモ。私はちょうどこの問題を抱えていました。

1. 接続文字列をコメントアウトする 2. 接続文字列なしで Web サイトを再構築する 3. コントローラーを追加する 4. 接続文字列のコメントを解除する 5. Web サイトを再構築する

すべて正常に動作します。

于 2014-03-14T03:44:39.797 に答える
2

Entity Framework 6 と MySQL データベースを使用して API 2.0 / MVC5 コントローラーを追加すると、この問題が発生しました。

[DbConfigurationType(typeof(MySqlEFConfiguration))]

このクラス属性をコメントアウトします。プロジェクトをビルドします。次に、MySqlでコントローラーを追加するとうまくいきます。

コントローラーが追加されたらコメントを外し、通常どおり続行します。

于 2016-01-10T18:34:11.237 に答える
1

わかりました、これは問題に対する私の邪悪な解決策です。私はついにそれを機能させました。Win8 VS2012 EF5 MVC4

  • Nuget パッケージ EntityFramework.SqlServerCompact がインストールされていることを確認してください
  • 最初は、DbContext を手動で追加しないでください。代わりに、足場メニューの
  • スキャフォールディングを使用してコントローラーとビューを 1 つ作成したら、web.config 内の古い接続文字列 (SQL CE 4.0 を使用するもの) に切り替えます。その後、すべてがうまくいきます
于 2012-09-03T21:44:43.277 に答える
1

これは関連しているように感じますが、上記の解決策を使用して問題を修正し、コントローラーを再度構築できるようにしました。その後の問題は、サーバー エクスプローラーで SQL Compact データベースが見つからないことでした。アプリケーションを追加したときは動作しているように見えましたが、見つかりませんでした。コンストラクターを削除したら、 public class SchoolContext : DbContext { public Sc​​hoolContext() : base("School") { } .

またdbを見ることができました。私はまだ開発中であり、さらにコントローラーを追加する必要があるため、もう一度使用する必要があると思います. しかし、サーバーエクスプローラーでデータベースが突然表示されなくなった理由を理解するのに、午前中ずっとかかりました。

于 2013-01-31T17:20:11.387 に答える
1

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

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

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

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

于 2013-02-01T06:02:07.880 に答える
1

これはばかげたことのように思えるかもしれませんが、別の場所でデータベースに接続していますか? 私はこれとまったく同じ問題に遭遇していました。サーバー エクスプローラー ビューでデータベースを開きました (SDF ファイルへの接続を確立しました)。この接続を閉じると、すべてが完全に機能しました。

于 2012-08-31T20:09:09.893 に答える