2008-08-15 38 views
8

Instalé VS SP1 y jugué con Entity Framework.Actualizar esquema de base de datos en Entity Framework

Creé un esquema a partir de una base de datos existente e intenté algunas operaciones básicas.

La mayor parte fue bien, excepto la actualización del esquema de la base de datos.

me cambió la base de datos en todos los sentidos básicos:

  • añade una nueva tabla
  • suprime una mesa
  • añade una nueva columna a una tabla existente
  • suprime una columna de una tabla existente
  • cambiado el tipo de una columna existente

Los primeros tres fueron bien, pero el cambio de tipo y la eliminación de columna no siguieron los cambios en la base de datos.

¿Hay alguna manera de hacer que el trabajo sea del diseñador? ¿O no es compatible en este momento? No encontré ningún material relacionado todavía, pero sigo buscando.

+0

Una gran pregunta. Tuve el mismo problema recientemente y hace un par de años. :-) Tal vez vale la pena mencionar, cambiar el nombre de una columna existente podría causar dolor de cabeza. – mnemonic

+0

Sí, es muy maduro ahora, con código primero ya no tengo este problema. – Biri

Respuesta

6

Supongo que posiblemente no sucedan porque romperían la construcción del código existente, pero eso solo es una suposición de mi parte.

Aquí es mi lógica:

En primer lugar, EF se supone que es más de 1: 1 mapeo de la tabla, por lo que es muy posible que el hecho de que va a eliminar una columna de la tabla A no significa que para esa entidad , no debería haber una descripción de propiedad. Puede asignar esa propiedad a otra tabla.

En segundo lugar, cambiar un tipo podría simplemente romper compilaciones. ese es el único razonamiento allí.

+0

Cambiar un tipo podría romper compilaciones, pero en la aplicación real sucede. RoR o Django tienen un procedimiento de fricción extremadamente bajo para eso. Para manejar el "corte" crea migraciones de datos. Si EF no tiene eso, entonces hay mucho que poner al día. –

1

Según las demostraciones del diseñador que he visto, no es una herramienta perfecta. Es un producto de la versión 1.0, por lo que es probable que tenga algunos puntos de dolor. El tipo de cambio es uno de ellos, parece. Al observar el diseñador y la generación de código, calculé que se rompería en tiempo de compilación (no probable) o en tiempo de ejecución (cuando el modelo se ejecuta realmente).

0

Debe borrar la columna usted mismo del diseñador o del archivo XML.

5

He encontrado que, en general, todavía hay bastantes errores con la funcionalidad 'Actualizar el modelo desde la base de datos'.

Las claves son las más importantes para mí: todavía no he realizado ninguna modificación en una relación de clave externa o para agregar una clave principal a una tabla y hacer que el actualizador funcione correctamente (dado que dará una compilación error en el código generado) - pero para resolver el problema, es una simple cuestión de eliminar el modelo y volver a importar (solo toma un minuto) - esto es menos que ideal, obviamente, pero nunca he tenido un fallo de un 'fresco 'importar.

+1

Se sentía tan mal borrar y empezar de nuevo ... ¡pero creo que no soy la única persona que tuvo que recurrir a esto! –

0

Como se mencionó anteriormente, puede simplemente eliminar la columna del diseñador. En cuanto a cambiar el tipo de datos de la columna: simplemente actualice el modelo desde la base de datos, luego vaya a las asignaciones de la tabla y seleccione la columna que cambió en la base de datos. los valores a la derecha representan su modelo, curiosamente esto no se actualiza automáticamente, solo seleccione la columna a la derecha y vaya a propiedades y cambie el tipo de datos allí. Debería convertirse en un menú desplegable.

Saludos.

Ruddy

0

que edificó aplicación similar como su pedido. Pero mi solución fue dura. Voy a tratar de decir;

  1. usted tiene que crear sus propias clases de gestión de base de datos y estos objetos serán responsables de crear, esquema de base de actualización (I creado manualmente eso).

  2. Vi buen artículo y código fuente en ADO.NET Team blog entonces también puedes descargar EDMTools de este blog, es de código abierto. Y también puede implementar rutinas de generación y actualización de modelos en su proyecto.

  3. Finalmente, cuando se modifique su esquema, debe volver a crear, vincular su modelo y reconstruir su conjunto de datos durante el tiempo de ejecución. Pero usted tiene que saber que la mayoría de importante, usted debe atar su ensamblaje modelo de datos para su proyecto con acoplamiento flexible (echa un vistazo a este post)

    Otra manera, usted debe esperar a EF 4.0 suéltala (CTP 1 ahora), que anunció que proporcionarán crear, eliminar, actualizar funciones de DatabaseScript.

buena cerradura

0

La forma en que estoy haciendo esto (y lo estoy haciendo todas las cosas que usted menciona, además de cambiar el nombre de las columnas) es haciendo cambios en la base de datos y regenerar el código usando EF Código EF Primero.

No estoy alterando las primeras clases del código de EF para lo bueno o lo malo (incluidas las columnas sin sentido para las relaciones) para facilitar el proceso.

Ningún diseñador o generador de esquemas ORM podrá realizar cambios en su base de datos de producción si tiene datos restringidos. Es por esto que siempre debe comenzar por verificar si sus cambios en el DB son factibles, probarlos en una base de datos de desarrollo y luego adaptar su código para reflejar los cambios.

Cuestiones relacionadas