Home > front end >  AutoMapper in C# Navigation Properties
AutoMapper in C# Navigation Properties

Time:01-26

i have a class

public class Order
{
    public string Name{ get; set; }
    public Nullable<int> StatusId { get; set; }
    public virtual Status Status { get; set; }
}

public class Status
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class OrderDto
{
    public Nullable<int> StatusId { get; set; }
    public string Name{ get; set; }
}

public class StatusDto
{
    public int Id { get; set; }
    public string Name { get; set; }
}

autoMapper:

cfg.CreateMap<Order, OrderDto>().ReverseMap(); 
cfg.CreateMap<Status, StatusDto>().ReverseMap(); 

In model classes I was able to do this:

name = order.status.Name

How can i achieve that when using autoMapper

CodePudding user response:

Your OrderDto does not have Status, so you can not get Status name from mapped object.

So either you will create new property in OrderDto class StatusName, and map it to status.name of your model, or add to OrderDto object StatusDto field, like this:

public class OrderDto
{
    public string Name{ get; set; }
    public Nullable<int> StatusId { get; set; }
    public StatusDto Status { get; set; }
}

Then AutoMapper will map models's Status field to OrderDto's Status field.

CodePudding user response:

You can do that, but you need to define it in mapper profile.

CreateMap<Order, OrderDTO>()
    .ForMember(dst => dst.name, src => src.MapFrom(x => x.status.Name));
  • Related