12

EF 4.3 (ベータ版) でテストしています

db テーブルと列を生成する新しいクラスがいくつかあります。

古いプロジェクトから、スキーマにいくつかの古いテーブルがあり、EF 経由でアクセスしたいと考えています。すべてのクラスが宣言されています。古いテーブルにアクセスするために、マップされた poco があります。

db migrations もその古いテーブルを作成しようとします。

このクラス/テーブルが移行の一部ではなく、ef モデルの一部であることをどのように設定できますか?

xxx.OnModelCreating()    
{
    modelBuilder.Ignore<myOldTableClass>();    
}

モデルからクラス全体を削除します。最後に、dbContext 経由のアクセスには使用できません。

自動移行を使用するのが好きです。古いデータベース テーブルを EF クラスに完全に移行することは避けようとしています。(はい、そのためのジェネレーターがあることは知っています) 120 個のテーブルがあり、古いアプリケーションでまだ使用されています。

EF (新しいアプリ) でのみ使用されるいくつかの新しいテーブル。一般的に使用されるテーブルが 3 つあります。それらは作成されるべきではありませんが、ef 経由でアクセスされるべきです。

4

2 に答える 2

30

リリースされたEF 4.3.1では、このシナリオのサポートが組み込まれています。データベース内の既存のテーブルにマップされているクラスを追加する場合は、-IgnoreChangesスイッチをに使用しますAdd-Migration

これにより、新しく追加されたクラスを含む更新されたメタデータ署名を持つ空の移行が生成されます。

通常、これは EF 移行の使用を開始するときに行われるため、「InitialMigration」という名前が付けられています。

Add-Migration InitialMigration –IgnoreChanges
于 2012-03-08T19:03:48.727 に答える
2

この場合の正しいワークフローは、変更 (新しいクラス) を追加する前に最初の移行を作成し、新しいクラスを追加してから、新しいテーブルのみを持つ新しい移行を作成することです。

これまで移行を使用していなかった場合、フレームワークはプロジェクト内のすべてのテーブルの移行を生成します。これは、最初の移行を作成していると見なされるためです。移行を生成したら、そのソース ファイルを変更し、メソッドCreateTableから古いクラスのコードを削除できます。問題は、その後の移行でおそらくこれを行う必要があることです。Up

編集: EF 4.3.1 を使用して既存のプロジェクトに移行を追加するためのチュートリアルを書きました

于 2012-01-26T12:10:40.800 に答える