23

有人可以解释一下我如何使用 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 转换为 enum 并且 enum 需要填充,然后 enum 到字符串需要执行

干杯

4

1 回答 1

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

此外,您不需要从intStatus枚举的映射。

于 2012-11-30T08:11:49.300 回答