Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

579
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!