30

Could someone please explain how I can use Automapper to map from DB int value to a string, using Enums as the collection.

I have the following

Enum

public enum Status { Open, Closed }

EF 4.1 Domain Model

public class MyEntity
{
    ...
    public int StatusId { get; set; }
    public virtual Status Status { get; set; }    
}

Dto being used on website

public class MyEntityDto
{
    public string Status { get; set; }
}

Current Automapper mappings

Mapper.CreateMap<int, Status>().ConvertUsing<EnumConverter<Status>>();
Mapper.CreateMap<Enum, string>().ConvertUsing(src => src.ToString());

Mapper.CreateMap<MyEntity, MyEntityDto>()
                .ForMember(d => d.Status, o => o.MapFrom(y => y.StatusId))

The EnumConverter in first line converts the int to a status fine without problem, but how do i convert the int or Status to the string in the DTO? Im lost any help would be appreciated.

I realise there are 2 conversions required here, the id to the enum when the data is pulled from the database and enum needs populating and then the enum to string needs doing

Cheers

Mark
  • 2,454
  • 4
  • 26
  • 29

1 Answers1

62
Mapper.CreateMap<MyEntity, MyEntityDto>()
      .ForMember(destination => destination.Status, 
                 opt => opt.MapFrom(source => Enum.GetName(typeof(Status), source.StatusId)));

Also you don't need mapping from int to Status enum.

theB3RV
  • 894
  • 4
  • 13
  • 33
Sergey Berezovskiy
  • 232,247
  • 41
  • 429
  • 459