Recientemente he estado programando con Entity Framework 4.1 Code First y me encanta su desarrollo, pero con solo un plan final y una lista de características que cambia rápidamente, estoy modificando constantemente la Clase / Base de datos para satisfacer las necesidades de las aplicaciones.
En el desarrollo, no hay datos en vivo y puedo eliminar fácilmente toda la base de datos para que se vuelva a crear con el nuevo esquema, sin embargo, obviamente, en vivo, ¡esto es muy malo!
Las únicas soluciones que puedo ver son soltar la tabla de metadatos y mantener la base de datos sincronizada manualmente o, básicamente, soltar y reiniciar.
Personalmente prefiero el primer método, ya que creo que será mucho más fácil agregar una columna / tabla que recrear y migrar datos, pero, a menos que me haya perdido algo, esto se aleja completamente de Code First.
Entonces, la pregunta realmente es, ¿es Code First solo sobre el desarrollo inicial y cuál es una buena estrategia para administrar EF para un entorno de producción?
fuente
Respuestas:
Mi opinión es que la creación automática de la base de datos del código primero es solo para el desarrollo. Respondí preguntas similares en Stack Overflow donde describí cómo actualizar la base de datos y por qué la funcionalidad automática es mala en la producción:
La actualización de la base de datos es una tarea semi-manual. No debería haber magia automática no probada detrás; además, EF 4.1 actualmente no tiene tal magia disponible (solo hay una presentación sobre las características en las que está trabajando el equipo de ADO.NET).
También puede consultar esta pregunta para comprender mejor cómo se actualizan los sitios web.
fuente
Mantener scripts de actualización .
En la propia base de datos, mantenga una tabla donde se guarde un registro con la versión del esquema.
Cuando inicia la aplicación, detecta la versión contra la versión que se supone que deben utilizar los binarios. Si difiere, ejecuta (o le pide al usuario) los scripts de actualización.
No olvide hacer una copia de seguridad de la base de datos primero.
fuente
La pregunta es de alguna manera defectuosa ya que establece conexiones entre el modelo de programación y el entorno de tiempo de ejecución donde no hay ninguno.
El código primero es principalmente un controlador de velocidad de desarrollo y no está realmente conectado al sistema de tiempo de ejecución.
En producción, tendrá una configuración adecuada que niega al tiempo de ejecución la posibilidad de eliminar / actualizar el modelo db.
fuente