Они не предоставляют способ сделать это до RTM, после чего они пообещали приложение для командной строки и поставщика msdeploy.
Источник: http://blogs.msdn.com/b/adonet/archive/2011/11/29/code-first-migrations-beta-1-released.aspx
Конечно, не удовлетворяясь этим, команда powershell хранится в каталоге пакетов и представляет собой простой текст, кажется, что она просто загружает сборку с именем EntityFramework.Migrations.Commands, хранящуюся в том же каталоге.
Прослеживая эту сборку, я придумал следующее
public class MyContext : DbContext
{
static MyContext()
{
DbMigrationsConfiguration configuration = new DbMigrationsConfiguration() {
MigrationsAssembly = typeof(MyContext).Assembly,
ContextType = typeof(MyContext),
AutomaticMigrationsEnabled = true,
};
DbMigrator dbMigrator = new DbMigrator(configuration);
dbMigrator.Update(null);
}
}
ОБНОВЛЕНИЕ: после небольшого количества экспериментов я выяснил еще несколько вещей
- Выполнение обновления в статическом конструкторе для вашего контекста плохо, поскольку оно нарушает команды powershell, намного лучше добавлять код для запуска приложения другим способом (Global.asax, WebActivator или метод Main)
- Приведенный выше код работает только при использовании AutomaticMigrations, вам нужно настроить пространство MigrationsNamespace, чтобы оно могло срабатывать при созданных вручную миграциях
- Класс конфигурации, который я создавал, должен уже существовать в вашем проекте (добавляется при установке пакета миграции nuget), поэтому просто создайте его экземпляр.
Это означает, что код упрощен до
DbMigrator dbMigrator = new DbMigrator(new NAMESPACE.TO.MIGRATIONS.Configuration());
dbMigrator.Update(null);