2011-05-18 30 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

相關問題