EF5 Code First迁移定制和数据库初始化程序

时间:2013-11-28 10:34:39

标签: entity-framework-5

这是一种奇怪的行为。我试图使用其中一个数据库初始化程序以及代码优先迁移。

我正在使用DropCreateDatabaseAlways和我的"迁移代码"永远不会被称为。即使使用MigrateDatabaseToLatestVersion也不会被调用。

我启用了迁移和一个用于测试的自定义索引(我更改了迁移文件并手动为一个表添加了索引创建)。

当我使用"更新数据库"从包管理器控制台它可以正常工作。创建数据库并将索引添加到表中。

当我使用任何DBInitializer,或者让EF创建数据库(默认)时,它会创建没有索引的数据库....

有什么想法吗?

布鲁诺

1 个答案:

答案 0 :(得分:0)

你有EnableAutomaticMigrations = True吗?这似乎阻止了初始迁移的创建,然后EF不运行迁移,它需要某种捷径来创建数据库。

如果您想在代码中运行迁移,可以这样做......

        //create a migrator and migrate your database
        var connectionInfo =
            new System.Data.Entity.Infrastructure
                .DbConnectionInfo(connectionString, "System.Data.SqlClient");
        //new up your auto-created Migrations Configuration class
        var config = new Context.Migrations.Configuration();
        config.TargetDatabase = connectionInfo;
        //new up a Migrator
        var migrator = new System.Data.Entity.Migrations
            .DbMigrator(config);
        var pendingMigrations = migrator.GetPendingMigrations();


        if (pendingMigrations.Any())
        {
            migrator.Update();
            var ctx2 = new CloudMinderDataContext(connectionString);
            //YourSeedMethodHere(ctx2);                
        }

http://softwaremechanik.wordpress.com/2013/11/26/ef6-if-migrations-are-enabled-cannot-createdatabaseifnotexists/