2011-05-10 14 views
15

Acabo de empezar a aprender .NET MVC, por lo que esta puede ser una pregunta tonta, pero aún no he encontrado una buena respuesta.Usar DropCreateDatabaseIfModelChanges en un entorno de producción

Estoy siguiendo el enfoque Code First usando Entity Framework para construir mi base de datos. Incluí lo siguiente en mi método Application_Start() para permitirme editar mi base de datos realizando cambios en mis objetos Model.

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

Me preguntaba qué pasaría si me empujó esta aplicación a un entorno de producción y luego hice algunos cambios en mis modelos y después he actualizado la aplicación? ¿Esto realmente caería y recrearía la base de datos en el entorno de producción?

¿Cuál es la mejor práctica para impulsar cambios en el entorno de producción? usando el enfoque de Code First?

+3

Tengo la mía envuelta en un bloque #if DEGUG ... ¡Creo que debería parar cualquier momento de whoopsie! : P –

+0

Solo un FYI, pero el especificador de tipo en SetInitializer es redundante y se puede omitir. – heisenberg

Respuesta

1

Puede eliminar la tabla EdmMetadata en su entorno de producción. En ese caso, EF no sabría el esquema actual para compararlo con el nuevo, por lo que simplemente asumiría que usted sabe lo que está haciendo y que no tocaría el esquema de la base de datos.

18

DropCreateDatabaseIfModelChanges solo debe usarse al principio del desarrollo, nunca en una máquina de producción. Si presionó a una máquina de producción e hizo cambios de esquema, perdería todos sus datos.

+1

¿No es un buen lugar el método .Seed para hacer una 'actualización' con los datos si el modelo cambia? ¡Gracias! –

0

El código primero no tiene la capacidad de actualizar su base de datos manteniendo intactos sus datos.

Cuestiones relacionadas