2013-11-28 3 views
0

Это странное поведение. Я пытаюсь использовать один из инициализаторов базы данных вместе с первыми миграциями кода.EF5 CodeFirst Migrations Персонализация и DatabaseInitializers

Я использую DropCreateDatabaseAlways, и мой «код миграции» никогда не вызывается. Даже используя MigrateDatabaseToLatestVersion, он не вызывается.

У меня включена миграция и один пользовательский индекс для тестирования (я изменил файл миграции и вручную добавил создание индекса для одной таблицы).

Когда я использую «Update-Database» из консоли диспетчера пакетов, он работает в полном порядке. База данных создается и индекс добавляется в таблицу.

При использовании любого DBInitializer, или пусть EF создать базу данных (по умолчанию), он создает базу данных без индекса ....

Любые мысли?

Bruno

ответ

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/

Смежные вопросы