2009-12-14 16 views
8

Estoy usando Entity Framework para hacer el ORM en el proyecto .NET. El problema al que me enfrento es que cuando cambia el esquema de la base de datos, no hay un mecanismo adecuado para actualizar el archivo edmx.¿Cuál es la mejor práctica cuando el esquema de la base de datos cambia en el marco de la entidad?

Por ejemplo, si hay una columna llamada "Salario", y la cambio a "EmpSalary", cuando actualizo edmx desde el estudio visual y me muestra dos columnas en la clase - Salario y Empaltar.

Una forma de averiguarlo es eliminar todo el archivo edmx y regenerarlo. Pero, ¿qué ocurre si renuncio manualmente a las propiedades de navegación en el modelo? Los perderé y tengo que recrearlos, lo cual es algo doloroso de hacer todo el tiempo.

¿Alguna de las mejores prácticas en esta área?

Gracias

+0

Me acaba de pasar esta mañana. Estaba ligeramente enojado con mi compañero de trabajo. Sin embargo, no estoy seguro de que sea la mejor práctica, no me ayudó mucho. – Kobi

+0

¿estás usando EF4? – ashraf

+0

@ashraf, no. Creo que EF 3.5 viene incluido con VS2008 SP1 –

Respuesta

2

En el diseñador de EF1, la función "Actualizar el modelo de la base de datos" no funciona en muchas situaciones. He estado trabajando con EF1 durante aproximadamente un año. Los problemas con el uso del diseñador de EF1 me han costado días, así que, en lo que a mí respecta, la mejor práctica es editar manualmente el XML de EDMX.

Para cosas complicadas, cree un nuevo modelo que contenga las nuevas tablas/columnas/relaciones/vistas que desea y luego copie y pegue el XML del nuevo EDMX en su XML existente.

Algunas cosas que se rompe cuando se utiliza "Modelo de actualización de la base de datos"

  1. sobrescribe los cambios manuales que realice en el XML.
  2. No se puede hacer frente a los valores predeterminados en la base de datos: insiste en que sus entidades proporcionan valores para los campos rellenos por valor predeterminado.
  3. Genera claves compuestas ridículos de puntos de vista e incluso si has arreglado el fin de tener teclas sensibles, TI comentarios fuera la versión correcta y crea una nueva versión utilizando sus propias claves extrañas!
  4. no establece todos los atributos para columnas agregadas a las tablas que establece cuando se crea la tabla de cero (por ejemplo, Unicode, MaxLength, FixedLength)

Estoy seguro de que hay más , pero esto fue suficiente para dejar de usarlo.

2

Tengo algunos modelos bastante grandes que ayudo a actualizar y lo más importante que he notado sobre el comando "Actualizar el modelo del asistente" en EF v1 es que no elimina CUALQUIER COSA del CSDL. El SSDL puede ser 100% correcto (y en la mayoría de los casos). Entonces hay dos formas de manejar esto.

1) Modifique/script los cambios XML. 2) Realice los cambios manualmente en el diseñador.

He intentado mucho para que el método 1 funcione. No es fácil, pero básicamente la mejor pista que puedo darte es comparar el SSDL con la versión CSDL y te acercas mucho (si solo hablas de columnas).

Lo peor es cuando cambia el nombre de una tabla. Entonces, cada relación FK que se creó en esa tabla en el CSDL está esencialmente duplicada (porque un cambio de nombre es realmente un eliminar/crear, pero recuerde que el asistente no elimina nada en el CSDL :-))

Entonces, el consejo más fácil que tengo. Realice los cambios desde el asistente de actualización. Luego compile solo el proyecto .edmx (manteniendo abierto al diseñador). Una vez hecho esto, simplemente haga doble clic en cada mensaje de error y "resuelva el error".

La resolución del error depende del escenario. Si se trata de columnas duplicadas, haga clic con el botón derecho en el nombre de la columna incorrecta y haga clic en Eliminar. Si es un FK malo, haz clic derecho sobre él y bórralo.

Recuerdo a alguien en Codeplex que intenta hacer el asistente de actualización con plantillas T4 (lo que usan con .NET v4 ahora). Creo que es mucho más complicado de lo que parece. Intenté hacerlo, y cuando llegué a escenarios como 1 .. * * ... 1 multiplicidad, el xml y el código en el generador de t4 dieron mucho miedo. Entonces, en su lugar, recurrimos al método de "resolver errores".

Cuestiones relacionadas