如何使用来自DB的automapper和int将int转换为枚举和字符串

时间:2012-11-30 08:04:55

标签: c# entity-framework automapper

有人可以解释我如何使用Automapper将DB int值映射到字符串,使用Enums作为集合。

我有以下

枚举

public enum Status { Open, Closed }

EF 4.1域模型

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

在网站上使用Dto

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

当前的Automapper映射

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))

第一行中的EnumConverter将int转换为状态正常没有问题,但是如何将int或Status转换为DTO中的字符串?我失去了任何帮助将不胜感激。

我意识到这里需要2次转换,当从数据库中提取数据并且枚举需要填充然后枚举到字符串需要执行时,枚举的id

干杯

1 个答案:

答案 0 :(得分:35)

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

此外,您不需要从int映射到Status枚举。