Automapper - 如何重用对象而不是创建新对象(此对象在列表中)

时间:2011-05-18 12:07:09

标签: automapper entity-framework-4.1

我遇到了以下问题: 我有一个实体(来自EF Code First)看起来像这样。

 public class Movie {
 public ICollection<AudioQuality> AudioQualities  {get;set;}
}

public class AudioQuality {
public Guid Id{get;set;}
public int Channels{get;set;}
}

//Automapper Init:
Mapper.CreateMap<Movie, MovieDto>();
        Mapper.CreateMap<MovieDto, Movie>().ForMember(dest => dest.AudioQualities,opt => opt.UseDestinationValue());


        Mapper.CreateMap<VideoQuality, VideoQualityDto>();
        Mapper.CreateMap<AudioQuality, AudioQaulityDto>();

        Mapper.CreateMap<VideoQualityDto, VideoQuality>();
        Mapper.CreateMap<AudioQaulityDto, AudioQuality>()
            .ForMember(dest => dest.Movies, opt => opt.Ignore());

我还有一个看起来很相似的DTO!

我从DTO映射到实体,如下所示:

//Get Movie from DB and than update it with the dto values
Movie movieFromDb = GetMoviesWithAllChilds().Single(mov => mov.Id == movieDto.Id);

//use update the entity from db with dto
Mapper.Map(movieDto, movieFromDb);

现在的问题是,Automapper为AudioQualities中的每个项目创建了一个新的AudioQuality-Object。

但我希望他只是将AudioQuality-Objects中的值从DTO复制到实体,而不是使用DTO中的值创建新对象。

有办法吗?

仅供参考:UseDestinationValue适用于集合(因此不会复制集合)。

br rene_r

1 个答案:

答案 0 :(得分:0)

从上下文中获取实体,并将其作为第二个参数传递给Mapper函数。更新将从源应用到目的地。

mapper.Map<SourceType, DestType>(source, dest);
相关问题