Automapper - Как повторно использовать объекты вместо создания новых (эти объекты находятся в списке) - PullRequest
1 голос
/ 18 мая 2011

У меня возникла следующая проблема: Я получил сущность (из 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 создает новый AudioQuality-объект для каждого элемента в AudioQualities.

Но я хочу, чтобы он просто копировал значения из AudioQuality-Objects из DTO в Entities вместо создания новых объектов со значениями из DTO.

Есть ли способ сделать это ??

К вашему сведению: UseDestinationValue работает с коллекцией (поэтому коллекция не копируется).

br rene_r

1 Ответ

0 голосов
/ 18 мая 2011

Получите вашу сущность из контекста и передайте ее в функцию Mapper в качестве второго параметра.Обновления будут применены от источника к месту назначения.

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