Automapper.Переопределить соглашение по умолчанию - PullRequest
0 голосов
/ 23 декабря 2018

Предположим, у меня есть следующая конфигурация

public class Source
{
    public Guid Id { get; set; }
    public Guid EntityId { get; set; }
}

public class Destination
{
    public Guid Id { get; set; }
}

Мне нужно сопоставить Source.EntityId с DestinationId.Но просто наличие

CreateMap<Source, Destination>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(s => s.EntityId))

не решает проблему.Он продолжает сопоставлять Source.Id и Destination.Id.Что я должен сделать, чтобы переопределить такое поведение?

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018
public class AutoMapperConfig
{
    public static void Register(IServiceCollection services)
    {
        var config = new AutoMapper.MapperConfiguration(cfg => {
            cfg.AddProfile<MappingProfile>(); 
        });
        var mapper = config.CreateMapper();
        Mapper.Initialize(cfg=>cfg.AddProfile<MappingProfile>());
        services.AddSingleton(mapper);

    }
}

и в Startup.cs

  public void ConfigureServices(IServiceCollection services)
        {
           ....
            AutoMapperConfig.Register(services);
            ....   
        }

и создайте MappingProfile.cs

 public class MappingProfile : Profile
    {   
        public MappingProfile()
        {
          CreateMap<Source, Destination>()
            .ForMember(dest => dest.Id, opt => opt.MapFrom(s => s.EntityId))
        }
    }
0 голосов
/ 23 декабря 2018

Проблема была в конструкторе. Я не обратил достаточного внимания на

public class Destination
{
    public Destination(Guid id)
    {
        Id = id;
    }

    public Guid Id { get; set; }
}

, поэтому он попытался использовать конструктор для инициализации поля Id .Решил это так:

CreateMap<Source, Destination>()
.ForCtorParam("id", opt=> opt.MapFrom(s => s.EntityId));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...