我可以使用automapper将多个对象映射到目标对象

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

到目前为止,它正在映射AccountBO属性。

现在我必须将对象objAddressBO属性映射到目标,包括上面的映射值。 为此,我在上面的代码行中编写了如下代码。

 AutoMapper.Mapper.CreateMap(); objUserAccount=AutoMapper.Mapper.Map(objAddressBO); 

但它丢失了第一次映射值并仅返回最后一次映射值。

请让我知道我需要做哪些更改才能在目标对象中同时包含这两个值。

您应该只配置一次映射。 最好的方法是使用配置文件:

 public class MyProfile : Profile { public override string ProfileName { get { return "MyProfile"; } } protected override void Configure() { AutoMapper.Mapper.CreateMap(); AutoMapper.Mapper.CreateMap(); } } 

然后应该在初始化方法(例如Web项目的App_Start )中初始化

您还应该创建一个unit testing来测试映射是否已正确配置

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

如果一切正常,并且假设我已正确理解了问题,则需要从listAcc[0]初始化objUserAccount ,然后从objAddressBO填写一些其他参数。 你可以这样做:

 objUserAccount = Mapper.Map(lstAcc[0]); objUserAccount= Mapper.Map(objAddressBO, objUserAccount); 

第一个地图将创建对象,第二个地图将更新提供的目标对象。

请注意,要使其正常工作,您可能需要稍微填写映射配置以提供正确的行为。 例如,如果您希望避免更新目标属性,可以使用UseDestinationValue指令。 如果要将条件应用于更新,可以使用Condition指令。 如果您希望完全忽略该属性,可以使用Ignore指令。

如果需要,可以在此处找到更多文档。