Automapper UseDestinationValue - PullRequest
       5

Automapper UseDestinationValue

4 голосов
/ 09 марта 2011

Если у вас проблема с отображением

VPerson vPerson = new VPerson() { Id = 2, Lastname = "Hansen1", Name = "Morten1" };
DPerson dPerson = new DPerson() { Id = 1, Lastname = "Hansen", Name = "Morten" };

Mapper.Initialize(x =>
{
     //x.AllowNullDestinationValues = true; // does exactly what it says (false by default)
});

Mapper.CreateMap();

Mapper.CreateMap()
      .ForMember(dest => dest.Id, opt => opt.UseDestinationValue());

Mapper.AssertConfigurationIsValid();

dPerson = Mapper.Map<VPerson, DPerson>(vPerson);

dPerson равно 0, я думаю, это должно быть 1, или я что-то упустил?

Рабочий пример

VPerson vPerson = new VPerson() { Id = 2, Lastname = "Hansen1", Name = "Morten1" };
        DPerson dPerson = new DPerson() { Id = 1, Lastname = "Hansen", Name = "Morten" };

        Mapper.Initialize(x =>
        {
            //x.AllowNullDestinationValues = true; // does exactly what it says (false by default)
        });

        Mapper.CreateMap<DPerson, VPerson>();

        Mapper.CreateMap<VPerson, DPerson>()
            .ForMember(dest => dest.Id, opt => opt.UseDestinationValue());


        Mapper.AssertConfigurationIsValid();

        dPerson = Mapper.Map(vPerson, dPerson);

1 Ответ

7 голосов
/ 09 марта 2011

Никогда не использовал опцию UseDestinationValue (), но похоже, что вы просто не хотите отображать Id при переходе от VPerson к DPerson.Если это так, используйте опцию Игнорировать:

.ForMember(d => d.Id, o => o.Ignore());

РЕДАКТИРОВАТЬ

Ох, стреляйте - я даже не заметил синтаксис, который вы использовали.Вам необходимо использовать перегрузку «Map», которая принимает существующий целевой объект:

Mapper.Map(vPerson, dPerson);

Используемая версия создает нового DPerson, а затем выполняет сопоставления.Тот, который я показываю выше, берет уже созданный dPerson, а затем выполняет сопоставления (и с показанной выше опцией Ignore ваш Id не перезаписывается).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...