Automapper UseDestinationValue

时间:2011-03-09 09:34:09

标签: c# automapper

遇到映射问题

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 个答案:

答案 0 :(得分:7)

从未使用过UseDestinationValue()选项,但看起来你只是想在从VPerson转到DPerson时不想映射Id。如果是这种情况,请使用忽略选项:

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

修改

哦拍 - 我甚至没有注意到你使用的语法。您需要使用接受现有目标对象的“Map”重载:

Mapper.Map(vPerson, dPerson);

您正在使用的版本会创建一个新的DPerson,然后执行映射。我上面显示的那个使用已经创建的dPerson,然后执行映射(并且使用上面显示的Ignore选项,不会覆盖您的Id)。