このエラーは762回目に発生しましたが、今回は、Azureの「本番」データベースを削除してからサイトを公開した直後に、本番サイトにアクセスしようとするとすぐにエラーになります。
The model backing the 'PropertyContext' context has changed since the database was created. Consider using Code First Migrations to update the database
この問題を他の方法で修正できなかったため、データベースを削除しましたが、まだ機能しません。
重要なポイント:
Global.asaxで次のことを試しました(両方のプロジェクトで)
Database.SetInitializer PropertyContext>(null); <-SOでは最初の<
そして
Database.SetInitializer(new MigrateDatabaseToLatestVersion<PropertyContext, MyConfiguration>());
new PropertyContext().Database.Initialize(true);
.net 4.5を使用しています
新しいデータベースでこのエラーが発生するのはなぜですか?このサイトを機能させるにはどうすればよいですか?
ASP.Netアプリケーションで同じエラーが発生しました。私の場合、Code Firstは使用しませんでしたが、明らかにCode Firstを使用する標準のASP.Net認証プロバイダーを使用し、この問題のために認証が失敗しました。
私にとっての解決策は、dbo.__MigrationHistory
テーブルを削除することでした。その後、認証が正常に機能し始めました。 注意してください!このソリューションは万人向けではありません!これで問題は解決しますが、潜在的に危険です。
ASP.Net認証プロバイダーは、データベースにテーブルを自動的に作成します。
デフォルトでは、テーブルは空です。Webサイトの新しいログインを作成していない場合は、上記の「迅速で汚れた」ソリューションを使用できます。ユーザー情報の保持を重視する場合、またはCode First移行の仕組みを単に好む場合は、次の手順を実行します。
<connectionStrings>
要素の下のレコードの1つになります。パッケージマネージャーコンソールを開きます。
ツール->ライブラリパッケージマネージャー->パッケージマネージャーコンソール
Update-Database -ConnectionStringName MyConnectionStringName
MyConnectionStringNameを、web.configで検索した実際の名前に置き換えます。
このコマンドの結果として、Update-Database
コマンドによって生成された一連のコードを含む新しいフォルダー「移行」が表示されます。アプリを再構築して再展開すると、新しい移行コードが起動時に実行され、データベーススキーマがASP.Net認証プロバイダーコードの更新バージョンと同期します。
マイグレーションでCode Firstを使用する場合、データベースは__MigrationHistory
というテーブルを作成して現在のスキーマを追跡します。アプリケーションを実行すると、Entity Frameworkはこのテーブルをチェックして、データベーススキーマがデータベースエンティティと一致することを確認します。それらが一致しない場合、このエラーが発生します。
データベースを更新するには、次の手順を実行します。
DbContext
を含むプロジェクトに設定されていることを確認してくださいApp.Config
/Web.Config
ファイルを含むプロジェクトが「スタートアッププロジェクトとして設定」であることを確認します(複数の構成がある場合は、データベース接続文字列が定義されている必要があります。Update-Database -ConnectionStringName MyConnString
と入力します。MyConnString
は、App.Config
/Web.Config
の接続文字列のname(実際の接続文字列ではありません)です。次のようなエラーが発生した場合:「保留中の変更があり、自動移行が無効になっているため、現在のモデルに一致するようにデータベースを更新できません。」
自動移行を有効にして、もう一度お試しください。自動移行を有効にするには
Migrations
フォルダー(DbContext
を含むプロジェクト内)で、Configuration.cs
を開きます。AutomaticMigrationsEnabled = true;
Entity Framework/DbContextがデータベースの変更を監視しないようにするには、データベースの__MigrationHistory
テーブルを削除するだけです。データベースを手動で更新したままにすることは、ユーザー次第です。
これからの解決策は、静的メソッドSetInitializerを使用し、コンテキストにNull値をバインドすることです。 Webソリューションで作業している場合、コードを記述する最適な位置は、Global.asax.csファイルのApplication_Startです。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
//...
Database.SetInitializer<MyContext>(null);
}
今朝、同様の問題が発生しました。突然エラーが表示され、解決できませんでした。
The model backing the 'ApplicationDbContext' context has changed since
the database was created. Consider using Code First Migrations to update
the database
MVC用の1つのプロジェクトと、モデル、コンテキスト、およびリポジトリ用の別のプロジェクトがあります。私は何週間もそれに取り組んでいますが、今日は停止と言いました。
データベースの削除、移行の有効化、移行の追加、データベースの更新を何度も試みたため、数え切れませんでした。 MigrateDatabaseToLatestVersionおよびDropCreateDatabaseIfModelChangesに初期化子を追加しました。すべて無駄に...
最終的に機能するようになったのはモデル、コンテキスト、リポジトリをMVCプロジェクトに移動することでした(私は熱心ではありませんでした)...その後、コードをまったく変更せずにすぐに動作しました(名前空間以外)!非常に奇妙な...
私はこの問題を解決しようとして日中に多くのブログ記事を読みました。そのうちの1つ(私はどれがわからない)は、DLLファイルへの参照が必要に応じて常に更新されなかったVisual Studio 2013のバグに言及しました。別のプロジェクトでadd-migrationとupdate-databaseを実行していたときですが、それは単なる推測です。
ソリューションでEF 6.1と.Net 4.5.1を使用しています。
同様の問題が発生しました!回答はこちら http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc3/cs/adding-a-new-field
(Rick Anderson)エラーを解決するには2つのアプローチがあります。
Entity Frameworkで、新しいモデルクラススキーマに基づいてデータベースを自動的に削除および再作成します。このアプローチは、モデルとデータベーススキーマを同時に進化させることができるため、テストデータベースでアクティブな開発を行う場合に非常に便利です。ただし、デメリットは、データベース内の既存のデータが失われることです。したがって、本番データベースでこのアプローチを使用したくないのです。
モデルクラスと一致するように、既存のデータベースのスキーマを明示的に変更します。このアプローチの利点は、データを保持できることです。この変更は、手動で、またはデータベース変更スクリプトを作成して行うことができます。
私はこの問題を解決するために数時間を費やしました。 1つのプロジェクトは機能していましたが、もう1つのプロジェクトは機能していませんでした。
Entity Framework
の異なるバージョンを参照する異なるプロジェクトがありました。私の場合、Console appとWindows Service appがあり、両方ともコードファーストクラスとDbContext
を含む3番目のプロジェクトを参照していました。
Update-Package EntityFramework
を実行した後、両方のプロジェクトですべてが正常に機能しました。