0

私は Entity Framework のチュートリアルに従っています: リンク

ソースコードをダウンロードして実行しました。プロジェクトは正常に動作します (既定の接続文字列を使用)。

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

次に、リモート サーバーに接続するように接続文字列を変更しました (正常に接続されます)。ただし、テーブルは作成されず、アプリケーションを実行してコントローラーにアクセスすると、次のエラーが発生します。

エラー:

Model compatibility cannot be checked because the database does not contain 
model metadata. Model compatibility can only be checked for databases created 
using Code First or Code First Migrations.

私のデータベースユーザーは「dbowner」なので、データベースアクセスの問題だとは思いません。

私は EF を初めて使用し、Code First Migrations についてあまり知りません。上記のエラーに遭遇しましたか?コードの移行によってこの問題は解決しますか? もしそうなら、なぜですか?

4

3 に答える 3

0

Entity Framework Power Tools へのリンクを次に示します。リモートサーバー上のデータベースを「リバースエンジニアリング」してモデルを作成するために作られています。その後、EF を使用してこのデータベースに簡単にアクセスできます。

Code First のリバース エンジニアリング - POCO クラス、派生 DbContext、および既存のデータベースの Code First マッピングを生成します。

于 2013-03-22T08:59:13.747 に答える
0

データベースが既に存在する場合、私が試した初期化メソッドは両方とも失敗します。

Database.SetInitializer<Context>(new Initializer());
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>());

ただし、次を使用してデータベースを強制的に削除することができます。

Database.SetInitializer(new DropCreateDatabaseAlways<Context>());

次の SO 投稿は、私の質問に対する答えを提供します: SQL Server 2008 での Entity Framework Code First データベースのセットアップ

私は2つの組み合わせを試しましたが、最適な解決策は手動でSQL Management studioにアクセスしてデータベースを削除し、初期化子を使用して再作成することであると判断しました。これにより、データベースのコンテンツをシードできるようになります。

Database.SetInitializer<Context>(new Initializer());

データベースのシード処理は非常に不安定なプロセスでもあるため、詳細については、こちらを参照してください。 Entity Framework CodeFirst を使用してデータベースをシードするにはどうすればよいですか?

于 2013-03-24T19:50:48.977 に答える