简体   繁体   中英

How do i convert a int to an enum and a string using automapper and int from DB

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

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.

This solution potentially contains less code than accepted answer if in your EF model you are using several enums:

var config = new MapperConfiguration(_ =>
{
   _.CreateMap<decimal, Status>().ConvertUsing(s => (Status)s);

   _.CreateMap<MyEntity, MyEntityDto>();
});

config.AssertConfigurationIsValid();
_mapper = config.CreateMapper();

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