我可以使用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
指令。
如果需要,可以在此处找到更多文档。