web-dev-qa-db-ja.com

Entity Framework Seedメソッドが呼び出されていません

Entity Framework 4.4を使用しており、移行を使用しています。データベースはすでに存在しており、定期的に更新する必要があります。ただし、seedメソッドは呼び出されていないため、ルックアップ値は追加されていません。

コードは次のようになります。

internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
{
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
            SetSqlGenerator("System.Data.SqlClient", new OurSqlServerMigrationSqlGenerator());
        }

        protected override void Seed(KinectionDbContext context)
        {
            SeedLookupTables(context);
        }

        private static void SeedLookupTables(KinectionDbContext context)
        {
            context.Titles.AddOrUpdate(t => t.Value,
                new Title {Value = "Mr"},
                new Title {Value = "Mrs"},
                new Title {Value = "Miss"},
                new Title {Value = "Ms"},
                new Title {Value = "Dr"}
            );

            context.SaveChanges();
        }

}


public class MyDbContext : ObjectContext
    {
        public MyDbContext()
        {

        }

        static MyDbContext ()
        {
            Database.SetInitializer<KinectionDbContext>(null);
        }

        public DbSet<Title> Titles { get; set; }

}

そして私達は呼んでいます:

Add-Migration Seed

しかし、移行は空になります。

Seedがcmotが呼び出されている理由と、ルックアップテーブルの追加の値が検出されていない理由を誰かが知っていますか?

ありがとうN

12
Johnny Doeness

移行Seedメソッド

update-DatabasePowerShellコマンドが実行されるたびに実行されます

Update-DatabaseではなくAdd-Migrationを呼び出す必要があります

Add-Migrationは、データベースを新しいバージョンに移行するためのコマンドを含む移行ファイルをスキャフォールドします。スキーマを変更する必要がないため、空です。シードだけの場合は、Add-Migrationを呼び出す前にUpdate-Databaseを呼び出す必要はありません。

参照:

最初のDb初期化戦略をコーディングします。
コードの最初の移行で読むことをお勧めします
管理された移行
データベース初期化子と移行Seedメソッド

23
Colin