有人可以解释一下我如何使用 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; }
}
D在网站上使用
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 转换为 status 没有问题,但是如何将 int 或 Status 转换为 DTO 中的字符串?我失去了任何帮助,将不胜感激。
我意识到这里需要 2 次转换,从数据库中提取数据时将 id 转换为枚举,并且需要填充枚举,然后需要将枚举转换为字符串
干杯
Mapper.CreateMap<MyEntity, MyEntityDto>()
.ForMember(destination => destination.Status,
opt => opt.MapFrom(source => Enum.GetName(typeof(Status), source.StatusId)));
您也不需要从
int
映射到 Status
枚举。
如果您需要
int
到 enum
转换,您可以使用显式转换:
Mapper.CreateMap<MyEntity, MyEntityDto>()
.ForMember(destination => destination.Status,
opt => opt.MapFrom(source => (Status)source.StatusId));
强制转换
(Status)
告诉编译器将 source.StatusId
中的整数值解释为 Status
枚举的值。