我遇到了以下问题:我得到了一个实体(来自 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);
现在的问题是,自动映射器为AudioQualityities中的每个项目创建一个新的AudioQuality-Object。
但我希望他只是将 AudioQuality-Objects 中的值从 DTO 复制到实体,而不是使用 DTO 中的值创建新对象。
有没有办法做到这一点??
仅供参考:UseDestinationValue 适用于集合(因此不会复制集合)。
BR rene_r
从上下文中获取实体,并将其作为第二个参数传递给映射器函数。更新将从源应用到目标。
mapper.Map<SourceType, DestType>(source, dest);