データベース ファースト モデルを使用してコーディングされた SQL データベースを含む既存のアプリケーションがあります (スキーマを変更するたびに EDMX ファイルを作成します)。
EF EDMX ファイルの代わりに EF POCO/DbContext をデータ層として使用するいくつかの追加開発 (元のアプリケーションをサポートする Windows サービス) が行われました。DbContext でイニシャライザ設定が構成されたことはありませんが、DbSet オブジェクトが常にテーブルと一致するため、データベースが変更されることはありませんでした。
ここで、既存のデータベースを使用する別のアプリケーションを作成しましたが、独自の新しいテーブルのみを使用し、EFs 初期化子を使用して作成します。私は、EF Code First を使用してこれらの新しいテーブルを管理する絶好の機会になると考えていました。最初にアプリケーションを実行したときはすべて正常に機能していましたが、現在、元の EF POCO DbContexts (初期化子を使用したことがない) の一部からこのエラーが発生しています。
データベースが作成されてから、'ServerContext' コンテキストをサポートするモデルが変更されました。Code First Migrations を使用してデータベースを更新することを検討してください
調査の結果、EF がそのスキーマのハッシュを SQL サーバーのどこかに保存されているハッシュと比較することがわかりました。この値は、コンテキストが実際にデータベースで初期化子を使用するまで存在しません (私の場合、最新のアプリケーションがテーブルを追加するまで存在しません)。
現在、私の他の DbContexts は、現在存在するハッシュ値を読み取り、それ自体と一致しないため、エラーをスローします。EDMX を使用した EF 接続にエラーはありません。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
解決策は、問題が発生しているすべての DbContextsにこの行を入れることだと思われます
Database.SetInitializer<NameOfThisContext>(null);
しかし、後で別のアプリケーションを作成し、最初に EF コードを使用して独自のテーブルを再度作成したい場合、この理論上のさらに新しいコンテキストと現在問題を引き起こしているコンテキストとの間のハッシュを調整することはできません。 .
EF がデータベースに格納するハッシュをクリアする方法はありますか? EF は、現在のコンテキストで DbSet として存在するテーブルのみを変更するほどスマートですか? 任意の洞察をいただければ幸いです。