2016-10-14 6 views
0

私はviewmodelsによっていくつかの情報を取るmvcウェブサイトを作成しています。 これは私のdb POCOAutomapper flag enum

public class ServiceTime : BaseEntity 
{ 
    public int IdRestaurant { get; set; } 
    public virtual Restaurant Restaurant { get; set; } 
    public Src.OrderStar.Entities.Day Day { get; set; } 
    public string StartTime { get; set; } 
    public string FinishTime { get; set; } 
} 

であり、これは私がautomapperによって相互にこれらのクラスを変換しています私の見解モデル

public class ServiceTimeModel 
{ 
    public int Id { get; set; } 
    public int IdRestaurant { get; set; } 
    public bool Monday { get; set; } 
    public bool Tuesday { get; set; } 
    public bool Wednesday { get; set; } 
    public bool Thursday { get; set; } 
    public bool Friday { get; set; } 
    public bool Saturday { get; set; } 
    public bool Sunday { get; set; } 
    public DateTime StartTime { get; set; } 
    public DateTime FinishTime { get; set; } 
} 

です。私は簡単に私が5つの異なる日をバインドしたい

ServiceTime

にServiceTimeModelをバインドする方法を解決することができませんでした意味、私はこれの逆にcouldntのこの構成

cfg.CreateMap<ServiceTime, ServiceTimeModel>() 
      .ForMember(dest => dest.Monday, opt => opt.MapFrom(src => src.Day.HasFlag(Day.Monday))) 
      .ForMember(dest => dest.Tuesday, opt => opt.MapFrom(src => src.Day.HasFlag(Day.Tuesday))) 
      .ForMember(dest => dest.Wednesday, opt => opt.MapFrom(src => src.Day.HasFlag(Day.Wednesday))) 
      .ForMember(dest => dest.Thursday, opt => opt.MapFrom(src => src.Day.HasFlag(Day.Thursday))) 
      .ForMember(dest => dest.Friday, opt => opt.MapFrom(src => src.Day.HasFlag(Day.Friday))) 
      .ForMember(dest => dest.Saturday, opt => opt.MapFrom(src => src.Day.HasFlag(Day.Saturday))) 
      .ForMember(dest => dest.Sunday, opt => opt.MapFrom(src => src.Day.HasFlag(Day.Sunday))) 
      .IgnoreAllNonExisting(); 

富栄によってServiceTimeModelにServiceTimeを変換することができますフラグの列挙型

アイデア?

+0

おそらく、カスタムマッピング関数を作成し、このようにそれを使用する必要があります。 '.ForMember(DEST => dest.Day、OPT => OPT。 MapFrom(src => GetDay(src))) '、このメソッドでは、どのフラグが' true'に設定されているかを確認し、適切な日を割り当てます –

答えて

1

を使用してメソッドを使用し、独自の実装を作成します。たとえば、 :(それは素敵ではないが、動作します)

cfg.CreateMap<ProductServiceTimeModel, ProductServiceTime>() 
    .ForMember(dest => dest.Day, opt => opt.ResolveUsing(src => 
    { 
     Src.OrderStar.Entities.Day result = (src.Monday ? Day.Monday : 0) | (src.Tuesday ? Day.Tuesday: 0) | (src.Wednesday ? Day.Wednesday : 0) | (src.Thursday ? Day.Thursday: 0) | (src.Friday ? Day.Friday : 0) | (src.Saturday ? Day.Saturday : 0) | (src.Sunday ? Day.Sunday: 0); 
     return result; 
    }));