0

しばらくの間、Entity Framework 4.3 の移行を試しましたが、次の動作を達成するのに苦労しています。コードが既存のデータベースで実行される場合、データベースを自動的に最新バージョンに移行したいのですが、データベースが存在しない場合、データベースは移行から自動的に作成されます。

問題は、作成した最初の移行に関連していると思います。-IgnoreChanges パラメーターを使用して最初の移行を作成した場合 (または、ここで説明されているように手動で削除した場合: http://thedatafarm.com/blog/data-access/using-ef-migrations-with-an-existing-database/ )、 DbMigrator クラスを使用して新しいテーブルを作成するために移行を使用することはできません。最初の移行がないためです。-IgnoreChanges を使用せずに最初の移行を作成すると、既存のデータベースの移行はできなくなります。誰にもこの問題の解決策はありますか?

4

1 に答える 1

0

既存のデータベースがあり、そのデータベースで移行を使用したいと同時に、新しい展開の場合に移行によるデータベースの作成をサポートしたいですか?

少しサポートされていないユースケースのようです。この場合 (テストされていない) 最も単純なのは、AppSettings キーによって駆動される条件付きコンパイルまたは条件付き移行のいずれかです。これは、データベースがないかのように初期移行を作成し、Up メソッドを次のように変更することを意味します。

public override void Up() {
    if (ConfigurationManager.AppSettings["NewDatabaseRequired"] == "true") {
        // Here is generated content
    }
}

また

public override void Up() {
#if NewDatabaseRequired
    // Here is generated content
#endif
}

現在のデータベースのスクリプトを作成する、テーブルが既に存在する場合は終了するようにスクリプトを変更する、移行アセンブリにスクリプトをリソースとして追加するUp-IgnoreChanges.

別のオプションとして、追加のデータベース接続を開き、移行からのテーブルが既に存在するかどうかを確認できます ( sys.tablesSQL Server でビューをクエリすることにより)。これには、生成されたスクリプトは必要ありません。

于 2012-07-04T16:28:41.390 に答える