¿Cuál es la mejor manera de ejecutar todas las migraciones de bases de datos requeridas al inicio de la aplicación con EF 4.3?Marco de entidades 4.3 ejecutar migraciones al inicio de la aplicación
Respuesta
La mejor manera debe ser utilizando el nuevo inicializador MigrateDatabaseToLatestVersion
.
Database.SetInitializer<YourContext>(
new MigrateDatabaseToLatestVersion<YourContext, YourMigrationsConfig>());
Database.Initialize(false);
¿Dónde se debe colocar este código? No se puede usar Database.Initialize en App_Start ya que no se puede usar en un contexto estático. –
@ MaximV.Pavlov: intente agregarlo al constructor estático de su contexto. –
@LadislavMrnka: ¿cuál es el propósito de 'Database.Initialize (false);'? Desde mi prueba con 'MigrateDatabaseToLatestVersion', la base de datos se crea, se inserta y se actualiza a la última versión sin esa segunda llamada a Initialize. (en EF5 ...) – demoncodemonkey
Una gran descripción de las opciones de configuración EF 4.3 se puede encontrar en EF 4.3 Configuration File Settings en el blog del equipo de ADO.NET. La última sección describe los inicializadores de base de datos, incluido el nuevo inicializador de Code First MigrateDatabaseToLatestVersion
. Aunque Entity Framework -como muchas otras características de .NET 4.x- favorece la convención sobre la configuración, este es un caso donde podría ser muy útil establecer el inicializador de base de datos MigrateDatabaseToLatestVersion
a través del archivo de configuración de la aplicación en lugar de código en tu aplicación.
Al usar la configuración, también tome nota de mi comentario sobre esa publicación, para hacer que la configuración sea mucho más legible. – Rudi
Necesitaba hacerlo explícitamente, porque utilizo un uber-contexto para la migración, un superconjunto de las otras migraciones. El bit de clave es:
var dbMigrator = new System.Data.Entity.Migrations.DbMigrator(
new Lcmp.EF.Migrations.Migrations.Configuration());
dbMigrator.Update();
con una rociada de la tala Elmah, en realidad yo uso este, llamado desde Application_Start(). Se roban fragmentos de las ideas de los demás. No estoy seguro de que la pieza enclavada de seguridad de hilo sea necesaria.
public static int IsMigrating = 0;
private static void UpdateDatabase()
{
try
{
if (0 == System.Threading.Interlocked.Exchange(ref IsMigrating, 1))
{
try
{
// Automatically migrate database to catch up.
Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Checking db for pending migrations.")));
var dbMigrator = new System.Data.Entity.Migrations.DbMigrator(new Lcmp.EF.Migrations.Migrations.Configuration());
var pendingMigrations = string.Join(", ", dbMigrator.GetPendingMigrations().ToArray());
Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("The database needs these code updates: " + pendingMigrations)));
dbMigrator.Update();
Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("Done upgrading database.")));
}
finally
{
System.Threading.Interlocked.Exchange(ref IsMigrating, 0);
}
}
}
catch (System.Data.Entity.Migrations.Infrastructure.AutomaticDataLossException ex)
{
Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(ex));
}
catch (Exception ex)
{
Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(ex));
}
}
- 1. Entity Framework 4.3 Migraciones mover datos existentes
- 2. Ejecutar la aplicación en el inicio
- 3. Cómo ignorar una tabla/clase de EF 4.3 migraciones
- 4. Ejecutar migraciones desde la consola de rieles
- 5. EF 4.3 Migraciones de código con CreateIndex y Argumentos anónimos
- 6. Marco de entidades y objetos de acoplamiento
- 7. Aplicación web - Autenticación/Marco de inicio de sesión
- 8. Ejecutar migraciones de FluentMigrator desde el código
- 9. Ejecutar la aplicación Java en el inicio de Windows
- 10. Deshacer cambios en las entidades del marco de entidades
- 11. Activación de la migración de EF al inicio de la aplicación mediante el código
- 12. ¿Es posible ejecutar apio automáticamente al inicio?
- 13. Agregando cosas para ejecutar al inicio de Pharo Image
- 14. Error de inicio de Eclipse al intentar ejecutar una aplicación de Android
- 15. El marco de juego se cuelga al inicio en: "Cargando la definición del proyecto desde"
- 16. Actualizar objetos del marco de entidades
- 17. MemoryLoadError al intentar ejecutar la aplicación py2exe
- 18. Ejecutar la aplicación Qt al iniciar como demonio Linux
- 19. ¿Cómo ejecutar la aplicación Java al inicio del sistema en Windows/Linux/MacOS?
- 20. Windows: Inicio lento de la aplicación
- 21. Programación de agregar la aplicación Java al inicio
- 22. Flash - Agregar marco a la línea de tiempo, al inicio de la línea de tiempo
- 23. ¿Cómo ejecutar un script al inicio de Ubuntu?
- 24. ejecutar una función de inicio de la aplicación del anillo/compjure después de desplegar
- 25. inicio de sesión de la aplicación Android
- 26. ¿Cómo agregar la descripción a las columnas en el código de Entity Framework 4.3 primero usando migraciones?
- 27. "La aplicación no tiene una firma válida" XCode 4.3
- 28. inicio de sesión() en el marco de prueba de Django
- 29. Entidades asociación mapeo marco entre la vista y la tabla
- 30. ¿Es posible la actualización del esquema de la base de datos del marco de entidades ADO.NET?
¿Quieres decir ejecutar desde el código? Entonces, aquí hay un enlace. Puede echar un vistazo http://romiller.com/2012/02/09/running-scripting-migrations-from-code/ –