automapper-4

AutoMapper tries to map DbModel to dateTime


so here is mapping definition:

 Mapper.CreateMap<EditMovieModel, Video>()
            .ForAllMembers(options => options.ResolveUsing<CustomMovieMapper>());

I have defined my custom resolver:

public class CustomMovieMapper : ValueResolver<EditMovieModel, Video>
{

    protected override Video ResolveCore(EditMovieModel source)
    {
        Video video = new Video();
        video.ID = source.ID;
        video.Name = source.Name;
        video.Description = source.Description;
        video.Thumbnail = source.Thumbnail;
        video.FileURL = source.FileURL;
        video.InsertionDate = video.InsertionDate!= null ? video.InsertionDate : DateTime.Now;
        video.Director = source.Director;
        video.Actors = source.Actors;
        video.ProductionDate = DateTime.Now;
        switch (source.MovieType)
        {
            case UIMovieType.Irainian:
                {
                    video.Language = Language.Irainian;
                    video.VideoType = VideoType.Movie;
                    video.Character = Character.Real;
                }
                break;
            case UIMovieType.Foriegn:
                {
                    video.Language = Language.Foriegn;
                    video.VideoType = VideoType.Movie;
                    video.Character = Character.Real;
                }
                break;
            case UIMovieType.Cartoon:
                {
                    video.VideoType = VideoType.Movie;
                    video.Character = Character.Cartoon;
                }
                break;
            case UIMovieType.Documentary:
                {
                    video.VideoType = VideoType.Documentary;
                }
                break;
            case UIMovieType.Theater:
                {
                    video.VideoType = VideoType.Theater;
                }
                break;
        }

        return video;
    }
}

and in my controller Action method:

Video movie = _videoRepository.Get(m => m.ID == movieViewModel.ID).SingleOrDefault();
            if(movie == null)
            {
                movie = new Video();
            }
movie = Mapper.Map(movieViewModel, movie);

when mappeing occurs, I get this exception:

 Missing type map configuration or unsupported mapping.
    Mapping types:
Video -> Nullable`1
NTV.Data.Model.Video -> System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

Destination path:
Video.ProductionDate.ProductionDate

Source value:
NTV.Data.Model.Video

but I'm not mapping Video to ProductionDate explicity. whats wrong? what I'm missing?


Solution

  • what I was wrong here is that I was using CustomReslover instead of using ITypeConverter interface. CustomResolver is used for chnage the behavior of mapping for properties not the entire object, hence this is the reason is saw that error. here I wanted to customize the entire behavior of mapping so this is the way:

    Mapper.CreateMap<EditMovieModel, Video>()
                .ConvertUsing(new CustomMovieMapper());
    
    public class CustomMovieMapper : ITypeConverter<EditMovieModel, Video>
    {
        public Video Convert(ResolutionContext context)
        {
            EditMovieModel source = (EditMovieModel)context.SourceValue;
            Video video = (Video)context.DestinationValue;
    
            video = video ?? new Video();
            video.ID = source.ID;
            video.Name = source.Name;
            ........
            return video;
        }
    }