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);
但它失去了第一次映射值和返回只有最后一次映射值。
请让我知道什么样的变化,我需要做中都有我的目标对象的值。
您应该只设置一次的映射。 要做到这一点,最好的办法是通过使用配置文件:
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();
}
}
如果一切工作正常,并假设我理解正确的问题,你要初始化objUserAccount
从listAcc[0]
然后从一些额外的参数填写objAddressBO
。 你可以做到这一点,如:
objUserAccount = Mapper.Map<AccountBO, UserAccount>(lstAcc[0]);
objUserAccount= Mapper.Map(objAddressBO, objUserAccount);
第一映射将创建的对象,而第二地图将更新提供目的地对象。
请注意,此正常工作,您可能需要填写您的映射配置有点提供正确的行为。 例如,如果你希望避免更新目标属性,你可以使用UseDestinationValue
指令。 如果你想一个条件适用于更新,你可以使用Condition
指令。 如果你想完全忽略的财产,你可以用Ignore
指令。
如果需要的话,更多的文档可以找到这里 。