11

Entity Framework Code First es un excelente marco para desarrollar nuevos proyectos. ¿Pero qué hay de extender una base de datos existente?Actualización del esquema de la base de datos con Entity Framework Code First

Por ejemplo, ¿qué ocurre si simplemente quiero agregar una propiedad adicional a una entidad de datos existente? ¿Hay alguna forma de "código primero" para hacer esto o tendré que agregar una columna de base de datos a mano usando SQL Server Management Studio o una herramienta similar?

Todo lo que he encontrado hasta ahora es cómo regenerar toda la base de datos desde cero cuando el esquema cambia, pero no quiero perder mis datos.

Si no me equivoco, hay una herramienta para Ruby on Rails que puede generar un script SQL que refleje los nuevos cambios en la base de datos. ¿Hay alguna manera de hacer esto en EF Code First también?

+0

Si tiene datos considerables que no desea perder ... Yo diría que use el primer modelo de esquema. ¿No es esta una opción? Aparte de que el dba no esté disponible ... ¿qué beneficios obtendría al usar el código primero? Ilumíname, por favor ... –

+0

@sam yi: dos años después de escribir esta publicación, tendería a aceptar tu comentario, aunque el primer acercamiento al código todavía parece atractivo desde el punto de vista del desarrollador. Es mucho más fácil simplemente agregar una propiedad a una clase que jugar con los comandos SQL y generar actualizar mis clases de EF más tarde. –

Respuesta

8

Actualmente estoy utilizando la biblioteca EntityFramework.Migrations que aborda el problema de la evolución del esquema de base de datos. Funciona creando clases de migración que generan scripts SQL para actualizar su esquema.

Todavía está en beta en este momento, pero lo encontré útil. Desafortunadamente, aún debe generar scripts de migración de datos.

Puede encontrar más información here.

7

Desafortunadamente no. Actualmente no hay formas de construir la base de datos de forma incremental en el código EF primero. ADO.NET team described some approach están trabajando pero estas herramientas no se han publicado aún. La única forma es usar el primer enfoque de base de datos o modelo. Significa que puede modelar sus cambios en la base de datos directamente y continuar con su codificación o puede usar el modelo EDMX y Database Generation Power Pack para construir su base de datos de forma incremental. Aún puede generar DbContext desde EDMX mediante una nueva plantilla T4 agregada en EF 4.1 pero se perderá el camino hacia la definición de clases de entidad (se crearán mediante una plantilla).

3

Estoy trabajando en un problema similar en este momento.

Uso el primer enfoque de EF Model. Utilizo un proyecto de base de datos, que es alimentado por el EF de sql genera.

Básicamente tengo un proyecto de base de datos como de costumbre, pero la tabla sql es el sql generado por el modelo EF.

FYI Los proyectos de bases de datos son capaces de generar guiones de cambio en bases de datos existentes sin perder todos sus datos. Puede configurar un proyecto db para advertirle si la alteración que se está realizando es perjudicial para los datos y no se ejecutará en tales casos.

No he terminado de refinar mi solución (cambiando el SsdlToSql10.tt que ef usa para producir sql. ¡Haciéndolo más amigable para proyectos de bases de datos!).

+0

Gracias por su consejo.Estoy usando la herramienta de comparación de esquemas de bases de datos de Visual Studio para generar una migración de esquema cuando necesito implementar una nueva versión. Funciona bien, pero sería bienvenida una solución más automatizada. Echaré un vistazo a los proyectos de bases de datos si tengo algo de tiempo, esto suena interesante. –

1

Visual Studio tiene una herramienta de Comparación de esquemas. Después de modificar el código puede generar una base de datos, luego usar la comparación de esquemas para modificar incrementalmente su proyecto de base de datos u otra base de datos

+1

Gracias por la sugerencia. Eso es exactamente lo que estoy haciendo en este momento. Funciona pero estaba buscando algo más integrado con EF. EF.Migrations es, de hecho, exactamente lo que estaba buscando –

Cuestiones relacionadas