es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Elementos infantiles faltantes con una relación de uno a muchos.

En mi código estoy obteniendo un List<TableA>

Definición de la clase TableA

class TableA {

        public int ID { get; set; }
        public virtual List<Child>? Children{ get; set; }

}

La tabla Child tiene dos columnas: TableAID y TableBID. La clave primaria (PK) es una clave compuesta que hace referencia a ambas columnas. TableAID es una clave foránea (FK) que hace referencia a dbo.TableA.ID y TableBID es una FK que hace referencia a dbo.TableB.ID.

Definición de la clase Child:

class Child
    {
        public int TableAID { get; set; }

        public int TableBID { get; set; }

        public virtual TableA TableA { get; set; }

    }

Datos de la tabla Child:

TableAID TableBID
1 4
1 5
2 4

Código de configuración de mi modelo:

modelBuilder.Entity<Child>()
                .HasKey(c=> new { c.TableAID, c.TableBID  });


            modelBuilder.Entity<TableA>()
               .HasKey(a => a.ID);

            modelBuilder.Entity<TableA>()
                .HasMany(a => a.Children)
                .WithOne(a => a.TableA)
                .HasForeignKey(a => a.TableAID);

Cuando obtengo la lista de tipo TableA, obtengo 2 elementos TableA. Para el primer elemento, TableA con ID 1, la propiedad Children tiene 2 elementos, lo cual funciona como se diseñó. Pero para el segundo elemento, TableA con ID 2, no obtengo elementos hijos (lista vacía), a pesar de que existe un elemento hijo que tiene un TableAID de 2. No puedo entender por qué sucede esto. ¿Alguien tiene algún consejo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que falta la configuración para el mapeo entre TableA y Child en el código de configuración del modelo. Intenta agregar la siguiente configuración:

    modelBuilder.Entity<child>()
        .HasOne(c => c.TableA)
        .WithMany(a => a.Children)
        .HasForeignKey(c => c.TableAID);
    

    Esto establece la relación uno a muchos entre TableA y Child, y asegurará que todos los elementos hijos con un TableAID que coincida con un elemento TableA sean incluidos en la propiedad Children de esa instancia de TableA.

Comments are closed.