entity framework - from - ¿Cómo actualizar correctamente un modelo de entidad después de los cambios en la estructura de la base de datos?
update edmx from database (2)
Estás haciendo lo correcto para actualizar. Sin embargo, después de generar automáticamente un modelo, puede personalizarlo. Cuando actualice, el diseñador de EF desea probar y conservar las personalizaciones que haya realizado. Tiene que adivinar sobre esto, y no siempre es correcto. Intentaré y explicaré cómo lo adivina, ya que esto podría ayudarte.
Su EDMX tiene tres partes:
- Esquema del cliente (CSDL)
- Esquema de tienda (SSDL)
- Mapeo entre cliente y tienda (MSL)
El diseñador "posee" el esquema de la tienda. Se regenerará casi desde cero cada vez que actualice. Aunque es posible personalizar el esquema de la tienda editando manualmente el SSDL, a menudo pierde estos cambios cuando actualiza su modelo.
Usted, por otra parte, "posee" el esquema del cliente. El diseñador generará el esquema de cliente para usted la primera vez que se ejecute, y generará un esquema de cliente para los objetos de metadatos de base de datos recién importados, como tablas o columnas asignadas recientemente. Pero una vez que el esquema del cliente se ha generado para un objeto, generalmente no se regenerará, porque el diseñador está tratando de preservar sus personalizaciones. Por lo tanto, si cambia su base de datos de manera que afecte el esquema del cliente, debe actualizar el esquema del cliente manualmente. Puede hacer esto en el diseñador de GUI, o manualmente, en el XML.
En su caso, lo más fácil sería simplemente seleccionar la navegación en el diseñador de la GUI y eliminarla. Esto supone que ya no hay ninguna propiedad de ID para la navegación en la base de datos, en ningún lado de la relación.
He hecho algunos cambios en la estructura de la tabla y especialmente en las relaciones entre las tablas en mi base de datos de SQL Server. Ahora quiero actualizar mi modelo de Entidad basado en esta nueva estructura de base de datos.
Al hacer clic derecho en el archivo edmx, encuentro la opción "Actualizar modelo de base de datos". Pero cuando hago esto, obtengo una actualización del 50%: las nuevas columnas aparecen en las clases de Entidad pero estoy confundido acerca de muchas propiedades de navegación que todavía están allí en el modelo, aunque las relaciones de clave externa correspondientes ya no existen en la base de datos. ( Editar: los miembros de las clases del modelo tampoco se eliminan aunque se hayan eliminado las columnas de la base de datos).
¿Estoy haciendo algo mal? ¿O hay otra opción para actualizar el modelo, incluida la eliminación de las propiedades de navegación? ¿O tengo que eliminar esas propiedades de navegación manualmente en los archivos de modelo?
Estoy utilizando Entity Framework versión 1 (VS 2008 SP1).
¡Gracias por la ayuda de antemano!
Si está trabajando con un modelo de entidad que no se ha personalizado y simplemente necesita obtener cambios de su base de datos SQL en su proyecto de VS, me resulta más fácil eliminar el modelo de entidad y regenerarlo desde la misma fuente. De esa manera, las tres partes de su EDMX reflejarán lo que está en su base de datos. He usado la opción "Actualizar modelo desde la base de datos" antes y luego edité el XML / diseñador y encontré que era un trabajo tedioso y lento al tratar con grandes bases de datos. No me malinterpretes, funciona al 100%, pero es mucho más rápido para mantener a tu modelo actualizado al recrearlo. Incluso si TIENE QUE editar algunas consultas de LINQ-a-SQL después, me parece que es mejor editar las consultas de LINQ-a-SQL que editar los modelos EDMX. Dicho esto, no he tenido que hacer eso todavía. IMPORTANTE: asegúrese de volver a crear su modelo con la misma configuración que antes, por ejemplo, si lo creó sin pluralizar los nombres de los objetos antes, haga lo mismo.