Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

575
Vistas
Entity Framework 6: tabla faltante con solo claves principales que hacen referencia a diferentes tablas

Estamos aprendiendo Entity Framework 6.1 (de NuGet) a medida que nos alejamos de Linq2Sql. Tenemos un pequeño puñado de tablas que asocian dos tablas separadas como se muestra a continuación.

Base de datos EF6 Primera generación

Diagrama de base de datos:

ingrese la descripción de la imagen aquí

Descripción general del esquema:

ingrese la descripción de la imagen aquí

Cuando está en Visual Studios, biblioteca de clase en blanco, haciendo un archivo EDMX de Database First EF6, el diagrama solo genera TableA y TableC; TableB no se genera.

ingrese la descripción de la imagen aquí

Vista de estudios visuales:

ingrese la descripción de la imagen aquí

Puede ver que solo se crean TableA y TableC. Técnicamente, TableB debería haberse creado, porque le gustaría poder administrar esas referencias.

La asociación entre A y C que se muestra en el diagrama:

ingrese la descripción de la imagen aquí

Siento que me falta una opción o no entiendo un concepto clave de Entity Framework. ¿Alguna idea de cómo generar la TableB faltante con el T4? El archivo EDMX lo muestra, pero por alguna razón no se genera en un archivo .CS con las dos propiedades que indican la relación.

La razón principal por la que necesitamos esto es que ampliamos la plantilla EF6 T4 para agregar algunos patrones de fábrica para que coincidan con nuestros modelos existentes. Debido a que no genera una clase para TableB, no obtenemos el código generado automáticamente que estamos buscando.

¿Pensamientos/sugerencias? Gracias.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

EF no generará entidades débiles o tablas de unión, debe configurar las relaciones manualmente a través de una API fluida o usando anotaciones de datos

Como se indica en el sitio web de Microsoft: bajo la convención de relaciones:

Nota: Si tiene múltiples relaciones entre los mismos tipos (por ejemplo, suponga que define las clases Person y Book , donde la clase Person contiene las propiedades de navegación Libros ReviewedBooks y Libros AuthoredBooks y la clase Book contiene las propiedades de navegación Author y Reviewer ) necesita configurar manualmente las relaciones mediante el uso de anotaciones de datos o la API fluida. Para obtener más información, consulte Anotaciones de datos: relaciones y API fluida: relaciones.

Consulte este enlace para obtener más información.

ACTUALIZADO

Una solución funcionará en el caso de EDMX (pero cuesta mantenimiento) de la siguiente manera:

  1. Eliminar las claves externas de la tabla de unión en la base de datos
  2. Actualizar el EDMX desde la base de datos
  3. Vuelva a crear las claves foráneas en la tabla de combinación

esta solución funcionará siempre que no vuelva a actualizar su modelo desde la base de datos.

Solución recomendada, mantenga todo tal como fue generado por EDMX y obtenga más información sobre cómo usar la operación crud para este caso utilizando los siguientes enlaces que el usuario '@TravisWhidden' informó como "útiles".

  1. Insertar/Actualizar Muchos a Muchos Marco de Entidades. ¿Cómo lo hago?
  2. https://www.youtube.com/watch?v=uMQwORSTGX4 (vídeo)
over 4 years ago · Santiago Trujillo Denunciar

0

Como mencionó @Hadi Hassan, EF no "expondrá" ni reconocerá tablas relacionales que estén compuestas exclusivamente por otras entidades.

Solución alterna:
Si solo necesita 'LEER' los datos, puede

  1. Defina una view en su esquema para TableB .
  2. Luego haga una actualización del Model (.EDMX) desde la base de datos (seleccione las vistas de actualización)
  3. Ahora podrá consultar sus datos de TableB utilizando su contexto EF.

Si necesita modificar (Crear, Actualizar, Destruir) registros en su TableB

  1. Cree procedimientos almacenados en su esquema, en consecuencia.

  2. Importe sus procesos como función en su modelo EF

  3. Ahora puede llamar a esas funciones desde el contexto de su modelo para el resto de sus operaciones CRUD.

over 4 years ago · Santiago Trujillo Denunciar

0

La forma más fácil que he encontrado es agregar un campo de incremento automático a la tabla y hacer que este único campo sea la clave principal. Luego agregue una restricción única que consista en las dos claves foráneas. Es posible que deba descartar la tabla y volver a crearla para configurarla de esta manera porque a la base de datos no le gustará descartar las relaciones PK existentes.

Luego, en el modelo de Entidad, elimine la tabla y también cualquier propiedad de navegación que la Entidad haya creado en relación con las relaciones en esta tabla. Guarde su modelo, reconstruya y luego actualice Desde la base de datos en el diagrama. Su tabla ahora debería aparecer para la Entidad como una tabla normal.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda