No proporcionan una forma de hacerlo hasta RTM, en ese punto se han prometido una aplicación de línea de comandos y un proveedor msdeploy. Fuente: http://blogs.msdn.com/b/adonet/archive/2011/11/29/code-first-migrations-beta-1-released.aspx
Por supuesto no estar satisfecho con eso, el comando de PowerShell se almacena en el directorio de paquetes y es texto sin formato, parece que simplemente carga una asamblea llamada EntityFramework.Migrations.Commands almacenados en el mismo directorio.
rastreo a través de ese montaje se me ocurrió la siguiente
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);
}
}
Actualización: Después de un poco de experimentación me di cuenta de algunas cosas más
- realizar una actualización en el constructor estático para su el contexto es malo, ya que rompe los comandos de PowerShell, es mucho mejor agregar el código al inicio de la aplicación de otra manera (Global.asax, WebActivator o método principal)
- El código anterior solo funciona cuando se usa AutomaticMi Por lo tanto, debe configurar MigrationsNamespace para que se remonte en las migraciones creadas manualmente.
- La clase de configuración que estaba creando ya debería existir en su proyecto (se agregó cuando instaló el paquete nuget de migración), así que solo instale eso.
Lo que significa que el código se simplifica a
DbMigrator dbMigrator = new DbMigrator(new NAMESPACE.TO.MIGRATIONS.Configuration());
dbMigrator.Update(null);
Tenga en cuenta que esto no está actualizado, el RTM de EF 4.3 contiene un nuevo inicializador de base de datos llamado MigrateDatabaseToLatestVersion. Consulte http://stackoverflow.com/questions/9281423/entity-framework-4-3-run-migrations-at-application-start para obtener más información. – Betty
Aunque la configuración del inicializador en el contexto del constructor parece interferir con los scripts de powershell. He vuelto a usar un módulo app_start con el código anterior. – Betty