2

このエラーが発生しました:

The model backing the 'database' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

しかし、問題は、私のエンティティがデータベース内と同じであるということです。同じmaxlength、nullの場合、同じデータ型です。

データベースとモデルの属性が同じではないため、モデルを更新するとエラーが発生します。しかし、私の質問はです。このエラーが発生する可能性がある他のケースはありますか?エラーは次のコードにあると表示されます。

int UserId = (from d in db.Tbl_Users
                         where d.dbUserID == userName && d.dbPassWord == pass
                         select d.dbUser).SingleOrDefault();

すべて問題ありません。tables属性はまったく同じです(データベースとモデル)が、アプリを実行するとエラーが発生します。だから、悪い質問を繰り返します、エラーの移行はいつ発生しますか?エラーが発生する別のシナリオはありますか?

4

2 に答える 2

0

DbContextクラスを使用する(つまり、DBに接続する)のはこれが初めてである必要があります。そのため、内部データモデルが構築され、データベーススキーマと比較されます。

編集:移行を使用しておらず、問題が解決するかどうかをすばやく確認したい場合は、dbo.__MigrationHistoryの内容を削除できます。

于 2013-03-25T20:17:08.093 に答える
0

アプリケーションでDbContextを使用してデータベースを呼び出すのは初めてなので、エラーが発生します。アプリケーションで初めてデータベースレコードを要求するたびに、Entity Frameworkは、DbContextが生成するモデルがデータベースで既に見つかっているモデルと同じであるかどうかを自動的に確認します。データベーステーブル自体ではなく、データベースに格納されているモデル。それらが異なることに気付くと、自動的にその例外をスローします。

これを回避するには、モデルが一致しない場合にエンティティフレームワークに何をするかを指示するために、ある種の初期化子を設定する必要があります。移行を使用している場合は、おそらく次のようになります(コンテキストを初めて呼び出す前にこれを実行してください)。

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>());

DropCreateDatabaseAlwaysやDropCreateDatabaseIfModelChangesなど、使用する他の初期化子もありますが、私は移行のものを非常に好みます。

于 2013-03-25T20:50:40.913 に答える