2011-05-03 8 views
8

En mi Global.asax tengo la siguiente línea:Código EF4 En primer lugar: ¿Cómo puedo cambiar el modelo sin perder datos

Database.SetInitializer<myDbSupport> 
    (new DropCreateDatabaseIfModelChanges<myDbSupport>()); 

Si no tengo esto, entonces cuando cambio la modelo, la base de datos sdf no tendrá la estructura correcta. Esto está bien en un entorno de desarrollo, pero cuando paso a la producción y deseo una actualización de la estructura DB, por supuesto, no puedo permitirme abandonar la tabla y perder los datos.

¿Es posible realizar un script DB cambios y ejecutar esta actualización antes de implementar el modelo con la estructura modificada?

+0

Me gusta mucho la Idea, creo que eso es lo que está sucediendo ahora en Python y Ruby con el comando 'db migrate', ¡no estoy seguro! –

Respuesta

12

Inicializador es para el desarrollo. Considero que cualquier proceso automático que cambie su base de datos de producción directamente desde la aplicación es malo. Alguien más puede simplemente olvidarse de la existencia, volver a desplegar .dll y su base de datos se ha ido.

La actualización de la base de datos es una operación que debe ejecutarse por separado como parte del script de actualización, paquete de instalación o actualización manual durante el mantenimiento de la aplicación y no durante la primera solicitud a la nueva versión. I described migration ayer.

Lo que está buscando es intializer personalizado que ejecutaría script externo creado en mi respuesta vinculada. Eso puede funcionar parcialmente si incluye muchos controles adicionales que evitarán ejecutar el script dos veces. ¿Pero por qué? Una vez que tenga un script, simplemente puede ejecutarlo una vez que haya terminado.

+1

Hola, gracias por la respuesta. Estoy de acuerdo, no quiero que el DB se actualice automáticamente en absoluto. Esto es lo que trato de dejar de pasar. Si actualizo manualmente el prod DB para que sea el mismo que mi Dev DB, ¿está diciendo que debería funcionar como se esperaba? – JAG

Cuestiones relacionadas