简体   繁体   中英

Merge entities in Entity Framework 6

I have these entities which represent Menu and Labels SQL tables:

public class Menu
{        
    public int IdMenu { get; set; }
    public int IdLabel { get; set; }
}

public class Label
{        
    public int IdLabel { get; set; }
    public string Value { get; set; }
}

In a controller I have this method:

public IActionResult GetAll()
{
    var menu = _service.GetAll();
    var model = _mapper.Map<IList<MenuModel>>(menu);
    return Ok(model);
}

but obviously, it gives me only IdMenu and IdLabel for each menu item.

What should I do to let it give me IdMenu and Value of Label ?


Update n. 1:

Entities:

public class MenuPadre_EL
{
    [Key]
    public int IdMenuPadre { get; set; }
    public int IdEtichetta { get; set; }
    public string Icona { get; set; }

    public MenuPadreUtente_EL menuPadreUtente { get; set; }
}

public class MenuPadreUtente_EL
{        
    public int IdMenuPadreUtente { get; set; }
    public int IdUtente { get; set; }

    public int IdMenuPadre { get; set; }
    public MenuPadre_EL menuPadre { get; set; }
}

DataContext:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Etichetta>().HasKey(e => new { e.IdEtichetta, e.Lingua });
    modelBuilder.Entity<MenuPadreUtente_EL>().HasKey(m => new { m.IdMenuPadre, m.IdUtente });
    modelBuilder.Entity<MenuPadre_EL>()
        .HasOne(mpu => mpu.menuPadreUtente)
        .WithOne(mp => mp.menuPadre)
        .HasForeignKey<MenuPadreUtente_EL>(mpu => mpu.IdMenuPadre);
}

Model:

public class MenuPadreUtente_ELModel
{
    public int IdMenuPadreUtente { get; set; }
    public int IdMenuPadre { get; set; }
    public int IdUtente { get; set; }
    public string Etichetta { get; set; }
    public MenuPadre_EL menuPadre { get; set; }
}

API Output:

[
    {
        "idMenuPadreUtente": 1,
        "idMenuPadre": 1,
        "idUtente": 1,
        "etichetta": null,
        "menuPadre": null
    }
]

why menuPadre is null?

You can do that as bellow:

[HttpGet]
public IActionResult GetAll()
{
    var menu = menueList();
    var lable = lableList();
    var model = (from _menue in menu
                join _lable in lable
                on _menue.IdLabel equals _lable.IdLabel

                select new
                {
                    IdMenu = _menue.IdMenu,
                    Value = _lable.Value,
                    
                }).ToList();

    return Ok(model);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM