web-dev-qa-db-ja.com

データベースファーストアプローチのためのEF移行?

EntityFrameworkでは、データベースの最初のアプローチを使用しています。私たちはいくつかの顧客を抱えており、新しい製品バージョンを導入するとき、SQL Compareなどのツールを使用して「手動で」DBスキーマの変更を適用しています。

EF Migrationsがお客様のDBに変更を自動的に適用するのに役立つ方法はありますか?

41
Shaddix

私の知る限り、EF MigrationsはCodeFirstを対象とした製品であり、Database Firstの操作をサポートしていません。

CodeFirstは、データベースを手動で変更しないことを前提としています。データベースへのすべての変更は、コードの最初の移行を通過します。

19
Paul

あると思います!最初にコードを続行する必要があります。

これを行うには、EF Dbが最初に作成した次のDbContextがあるとします。

public class MyDbContext : DbContext
{
    public MyDbContext()
        : base("Name=DefaultConnection")
    {

    }

    // DbSets ...
}

それを次のように変更して、最初にコードとそのすべての魔法のツール(移行など)の使用を開始します。

public class MyDbContext : DbContext
{
    public MyDbContext()
        : base("YourDbFileName")
    {

    }

    // DbSets ...
}

これにより、EFはローカルマシンのSQL Expressを使用して、YourDbFileNameという名前のローカルマシンの新しい接続文字列を作成します。これは、初期のDefaultConnection Dbが最初に作成されたようなものです。

あなたがあなたの方法を続ける必要があるかもしれないすべてはあなたのサーバーと他のオプションに従ってYourDbFileName ConStrを編集することです。

詳細 ここ および ここ

5
Amin Saqi

Entity Framework 4.1から、次のことができます 既存のデータベースを使用したコードファーストマイグレーション

したがって、最初にデータベースを用意し、モデルを作成して、移行を有効にします。

スキーマに変更を加える前に、Enable-Migrationsを実行する必要があることを覚えておくことが最も重要です。スキーマはdbとコード間で同期している必要があるためです。

2
tatigo

DbContext子オブジェクトを探し、このメソッドを探します。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

これにコメントすると:

throw new UnintentionalCodeFirstException();

その場合、移行操作で例外はスローされません。ご想像のとおり、移行ではこの部分を探して、各エンティティの構成とテーブルを確認します。

詳細がわからなかった場合は申し訳ありませんが、詳細をご希望の場合は、編集して改善させていただきます。