我可以使用automapper多个对象映射到目标对象(Can i map multiple obje

2019-08-04 02:11发布

UserAccount objUserAccount=null;
AutoMapper.Mapper.CreateMap<AccountBO, UserAccount>();
objUserAccount = AutoMapper.Mapper.Map<AccountBO, UserAccount>(lstAcc[0]);

截至这一点上,映射AccountBO性能优良。

现在,我必须对象映射objAddressBO属性到目的地,包括上述的映射值。 为了这个,我已经写代码如下以下到的代码以上线路。

AutoMapper.Mapper.CreateMap<AddressBO,UserAccount>();
objUserAccount=AutoMapper.Mapper.Map<AddressBO,UserAccount>(objAddressBO);

但它失去了第一次映射值和返回只有最后一次映射值。

请让我知道什么样的变化,我需要做中都有我的目标对象的值。

Answer 1:

您应该只设置一次的映射。 要做到这一点,最好的办法是通过使用配置文件:

public class MyProfile : Profile
{
    public override string ProfileName
    {
        get
        {
            return "MyProfile";
        }
    }

    protected override void Configure()
    {
        AutoMapper.Mapper.CreateMap<AccountBO, UserAccount>();
        AutoMapper.Mapper.CreateMap<AddressBO,UserAccount>();
    }
}

这应该然后在初始化方法被初始化(如App_Start用于网络项目)

您还应该创建一个单元测试来测试映射已正确配置

[TestFixture]
public class MappingTests
{
    [Test]
    public void AutoMapper_Configuration_IsValid()
    {
        Mapper.Initialize(m => m.AddProfile<MyProfile>());
        Mapper.AssertConfigurationIsValid();
    }
}

如果一切工作正常,并假设我理解正确的问题,你要初始化objUserAccountlistAcc[0]然后从一些额外的参数填写objAddressBO 。 你可以做到这一点,如:

objUserAccount = Mapper.Map<AccountBO, UserAccount>(lstAcc[0]);
objUserAccount= Mapper.Map(objAddressBO, objUserAccount);

第一映射将创建的对象,而第二地图将更新提供目的地对象。

请注意,此正常工作,您可能需要填写您的映射配置有点提供正确的行为。 例如,如果你希望避免更新目标属性,你可以使用UseDestinationValue指令。 如果你想一个条件适用于更新,你可以使用Condition指令。 如果你想完全忽略的财产,你可以用Ignore指令。

如果需要的话,更多的文档可以找到这里 。



文章来源: Can i map multiple objects to a destination object using automapper