3

最終編集: ええと、私がそうでなくても、Microsoft の優秀な人々 (マーケティング担当者を除く) が天才であることを知ってよかったです。覚えておいてください。データ モデルを変更したい場合は、パブリック フィールドとしてではなく、getter/setter を使用してプロパティを定義してください。ええと... 8-D

編集 4: これで解決したと思うので、これで誰かの時間を無駄にしなくてよかったです (ただし、それが本当かどうかはまだ完全にはチェックしていません)。

これが取り引きです:私はいわゆる新しいプロパティをGET / SETなしの単純な文字列として定義しました!もしよろしければ、私を悪い名前と呼んでください。私のモデルのキャッシュ バージョンはありませんが、とにかく指をさすのは楽しかったです。愚かな私。私の自我は間違いなく不平を言うのが大好きです。

すべてが正常に機能することを完全に確認した後、この記事に戻って最終的な締めくくりを投稿します.

元の投稿: 私は Entity Framework を使用しており、データ コンテキストが 1 つのプロジェクトにあり、モデルが別のプロジェクトにあるようにプロジェクトを構造化しています。以前は Migrations を使用できて機能していましたが、現在は機能しません。また、モデルにプロパティを追加してデータベースに手動で作成しようとすると、新しい列は単純に無視されます。どういうわけか、必要のない移行があり、Migrations はこれ以上先へ進むことを拒否したため、既存のデータベースをゼロから始めることにしました。途中で、すべてのプロジェクトを Entity Framework バージョン 6.0 にアップグレードしました。その後、アプリケーションは引き続き動作しますが、データ モデルを変更できません。

私はこれを試しました: http://www.ladislavmrnka.com/2012/03/ef-4-3-migrations-and-existing-database/ およびこれ: Entity Framework 4.1を使用して作成された本番環境の既存のデータベースで移行を使用する方法?

私が取ったステップ:

  1. データベースから _MigrationHistory テーブルを削除し、データ コンテキストを含むプロジェクトから Migrations フォルダーを削除しました
  2. Enable-Migrations -ProjectName MyProjectWithDataContext (成功、-Force は不要)
  3. Add-Migration Initial -IgnoreChanges -ProjectName MyProjectWithDataContext (成功)
  4. 更新データベース -ProjectName MyProjectWithDataContext

そこから、モデルを変更して別の移行を生成すると、Up() と Down() には生成されたコードが含まれません。したがって、Update-Database を実行しても何の役にも立ちません。

これらの手順も試し、それぞれに接続文字列を含むプロジェクトの StartUpProjectName も指定しましたが、どちらも役に立ちませんでした。

データベースを削除して、再生成できるようにしました (これは私が望んでいるものではありません)。このシナリオでも、新しい移行は何もしませんでした。

ヘルプ?

編集: モデルを DbContext と同じアセンブリに移動しました。ただし、移行フォルダーを削除し、_MigrationHistory テーブルを切り捨てた後の同じ状況:

  1. Enable-Migrations -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString

  2. 追加移行初期 -IgnoreChanges -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString

  3. Update-Database -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString (これにより、エントリが _MigrationHistory テーブルに正常に配置されます)

  4. モデル クラスの 1 つにプロパティを追加する

  5. Add-Migration AddProperty -ProjectName MyProjectWithDataContextAndModel -StartUpProjectName MyProjectWithConnectionString (これにより、空の Up() および Down() コードが再び生成されます)

確かに、これは非常に一般的なシナリオであり、移行が中断され、サドルに戻る必要があります。

編集 2: わかりました。データベースを削除し、最初の移行を作成してから Update-Database を実行することで、Code First が新しいデータベースを生成できるようにしました。次に、モデル クラスの 1 つにプロパティを追加し、[REQUIRED] 属性で装飾して、ソリューションを再構築しました。そこから Add-Migration を実行し、再び空の Up() と Down() を実行しました。

これにより、私は開発を行うことができず、締め切りが迫っていて、データ モデルをまったく変更できないという状況に陥ります。Chris Farley の言葉を引用すると: FOR THE LOVE OF GOD...助けてください! :-)

編集 3: データベースを削除してから、モデルで定義された新しいプロパティを使用して EF にデータベースを再生成させるとどうなるかを確認することにしました。つまり、最初に新しいプロパティをモデルに追加し、EF にデータベースを再生成させたのはその後でした。

何だと思う?新しいプロパティは、再生成されたデータベースにありませんでした。私は Code First の第一人者ではありませんが、私のコード ファイルが EF でまったく使用されていないことが明らかになりつつあります。データベースの再生成に使用されているモデルのキャッシュ バージョンがどこかにあります。

4

0 に答える 0