Entity Framework: agregar propiedad de navegación manualmente

115

Genere un modelo de Entity Framework (4.0) a partir de mi base de datos. No diseñé la base de datos y no tengo ningún control sobre el esquema, pero hay algunas tablas que no tienen definidas restricciones de clave externa, pero hay una relación implícita definida.

Por ejemplo:

Tengo una tabla llamada Personas que tiene las siguientes columnas: GenderID RaceID

Hay tablas para Género y Raza, pero no hay una clave externa en la tabla Personas.

Cuando importé el modelo, no agregué Propiedades de navegación para estas relaciones. Intenté agregarlo manualmente, pero From Role y To Role están deshabilitados. No estoy seguro de cómo agregar la relación yo mismo. ¿Cómo hago esto?

Despedir
fuente

Respuestas:

181

Sí, no es tan sencillo.

Esto es lo que haces:

1 - Haga clic derecho en el diseñador, Agregar -> Asociación

2 - Configurar la asociación y cardinalidades (Personas * .. 1 Género, Personas * .. 1 Raza)

3 - Vaya al Explorador de modelos -> Asociaciones

4 - Haga clic derecho en sus asociaciones recién creadas, haga clic en Propiedades

5 - Aquí debe configurar los puntos finales para las opciones clave y en cascada. Asegúrese de obtener los puntos finales correctos. También puede configurar una restricción de referencia aquí para su propiedad de navegación implícita.

6 - Asigne la propiedad de navegación a las tablas / campos relevantes.

7 - Valida tu modelo, cruza los dedos.

Espero que esto ayude.

RPM1984
fuente
20
+1 por salvar lo que queda de mi cabello. Agregaré # 6 requiere cambiar la columna de clave externa en la página de propiedades de la asociación, configuración de restricción de referencia. Pulse [...] para abrir el cuadro de diálogo de restricción de referencia y cambie el campo ficticio que el diseñador conectó a la tabla secundaria en Propiedad dependiente.
Joel Brown
8
También tendrá que ir a las propiedades de la tabla secundaria y eliminar el campo ficticio que agregó el diseñador (y que no se asigna a ningún campo real en la tabla secundaria).
Joel Brown
2
En el caso de Ver, también asegúrese de obtener correctamente la definición de su clave principal (haga clic con el botón derecho en seleccionar campos relacionados, márquelos como EntityKey en las propiedades). De lo contrario, podría obtener 'La multiplicidad no es válida en el rol en la relación porque el rol dependiente se refiere a las propiedades clave ...'
Mikl X
1
En el n. ° 2, es posible que desee asegurarse de desmarcar la casilla de verificación "Agregar propiedades de clave externa a la entidad". Eso crea algunos dolores de cabeza innecesarios si realmente no lo necesita.
Cifrado
Una vez que actualice nuevamente su modelo desde la base de datos, las entidades con andamio mantendrán la asociación agregada manualmente.
voodoo_patch
45

Me encontré con esta publicación de blog que propone la siguiente solución, que funcionó muy bien para mí (desafortunadamente no pude hacer que RPM1984 funcionara en mi situación).

  1. Agregar una Asociación a través del menú contextual del botón derecho del ratón del fondo del diseñador
  2. Configure su Asociación (asegúrese de desmarcar la creación de clave externa)
  3. Haga clic derecho en la asociación y elija Propiedades
  4. Haga clic en el ...botón de Restricción referencial
  5. Configure la relación entre las teclas dentro
  6. Verificar (desde el menú contextual del diseñador)
  7. ???
  8. ¡Lucro!
dav_i
fuente
4
+1 Point 4 me hizo hacerlo bien, lo pasé por alto con la respuesta RPM194.
Hugo Logmans