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.

Consulta de combinación izquierda y asignación de Dapper.

Hay una relación de uno a muchos entre las entidades de Marca y Campaña.

Con el Id proporcionado, necesito seleccionar la Campaña y la entidad de Marca relacionada junto con ella. Para hacerlo:

El siguiente código no lanza excepciones pero la entidad hijo de Marca no es correcta (es un registro falso y BrandId está en 0 mientras que su valor es 5 en la base de datos).

¿Qué falta aquí?

Definición de entidad:

Campaña:

public class Campaign : SqlEntityBase
{
public int BrandId { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
public Brand Brand { get; set; }
}

Marca:

public class Brand : SqlEntityBase
{
public string Name { get; set; }
public List Campaign { get; set; } = new List();
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que la configuración de mapeo podría estar faltando la asociación entre la entidad de Marca y sus Campañas asociadas. Una forma de resolver este problema es actualizar la configuración de mapeo para incluir la relación entre las dos entidades.

    Aquí hay un ejemplo de cómo hacerlo usando la API fluida:

    public class CampaignConfiguration : IEntityTypeConfiguration<campaign>
    {
        public void Configure(EntityTypeBuilder<campaign> builder)
        {
            builder.ToTable("Campaign");
    
            builder.HasKey(c => c.Id);
    
            builder.HasOne(c => c.Brand) // especificar la propiedad de navegación
                .WithMany(b => b.Campaign) // especificar el otro extremo de la relación
                .HasForeignKey(c => c.BrandId) // especificar la propiedad de clave foránea
                .OnDelete(DeleteBehavior.Cascade); // especificar el comportamiento de eliminación
    
            builder.Property(c => c.StartDate)
                .IsRequired();
    
            builder.Property(c => c.EndDate)
                .IsRequired(false);
        }
    }
    

    Con esta configuración, al consultar una entidad de Campaña con su entidad de Marca relacionada, el ORM debería poder asignar correctamente la entidad de Marca a sus Campañas asociadas.

Comments are closed.