Automapperを使用して、列挙型をコレクションとして使用してDBint値から文字列にマップする方法を誰かに説明してもらえますか。
私は以下を持っています
列挙型
public enum Status { Open, Closed }
EF4.1ドメインモデル
public class MyEntity
{
...
public int StatusId { get; set; }
public virtual Status Status { get; set; }
}
Webサイトで使用されているDTO
public class MyEntityDto
{
public string Status { get; set; }
}
現在のオートマッパーマッピング
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から列挙型への変換と、列挙型から文字列への変換が必要です。
乾杯
Mapper.CreateMap<MyEntity, MyEntityDto>()
.ForMember(destination => destination.Status,
opt => opt.MapFrom(source => Enum.GetName(typeof(Status), source.StatusId)));
また、int
からStatus
列挙型へのマッピングも必要ありません。