2011-05-18 47 views
1

我得到了以下问题: 我得到了一个实体(来自EF Code First),看起来像这样。Automapper - 如何重用对象,而不是创建新对象(此对象在列表中)

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创建一个新的AudioQuality-对象在AudioQualities每个项目。

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

有没有办法做到这一点?

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

BR rene_r

回答

0

从上下文获取你的实体,并传递它的映射函数作为第二个参数。这些更新将从源应用到目的地。

mapper.Map<SourceType, DestType>(source, dest); 
+0

那是什么我做这个行:电影movieFromDb = GetMoviesWithAllChilds()单(MOV => mov.Id == movieDto.Id)。 Mapper.Map(movieDto,movieFromDb); – 2011-05-18 12:13:39

相关问题