如何使用自动映射器和数据库中的 int 将 int 转换为枚举和字符串

问题描述 投票:0回答:2

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

干杯

c# entity-framework automapper
2个回答
64
投票
Mapper.CreateMap<MyEntity, MyEntityDto>()
      .ForMember(destination => destination.Status, 
                 opt => opt.MapFrom(source => Enum.GetName(typeof(Status), source.StatusId)));

您也不需要从

int
映射到
Status
枚举。


0
投票

如果您需要

int
enum
转换,您可以使用显式转换:

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

强制转换

(Status)
告诉编译器将
source.StatusId
中的整数值解释为
Status
枚举的值。

© www.soinside.com 2019 - 2024. All rights reserved.