23

Enums をコレクションとして使用して、Automapper を使用して DB int 値から文字列にマップする方法を説明してください。

私は次のものを持っています

列挙型

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 を問題なく status に変換しますが、int または Status を DTO の文字列に変換するにはどうすればよいですか? 私は助けを失いました。

ここでは 2 つの変換が必要であることに気付きました。データベースからデータを取得するときに id を列挙型に変換し、列挙型を入力する必要があり、次に列挙型を文字列に変換する必要があります。

乾杯

4

1 に答える 1

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

intまた、fromからStatusenumへのマッピングは必要ありません。

于 2012-11-30T08:11:49.300 に答える