我使用AutoMapper从平面DataObjects映射到胖BusinessObjects,反之亦然.我注意到,由于BusinessObjects的更改通知(使用自定义验证实现INotifyPropertyChanged等),从DataObjects到BusinessObjects的映射需要额外的时间.
因为我在映射期间通常不需要更改通知,所以我想将其关闭.所以我添加了一个属性"IsPropertyChangedEnabled".如果此属性设置为false,则不会引发NotifyPropertyChanged事件并保存时间.
题:
我可以告诉AutoMapper在映射过程的最开始将此属性设置为false吗?如果是这样,怎么样?
谢谢!
Ser*_*kiy 31
使用BeforeMap方法在映射过程之前设置属性值:
Mapper.CreateMap<Source, Destination>()
.BeforeMap((s, d) => d.IsPropertyChangedEnabled = false );
Run Code Online (Sandbox Code Playgroud)
Twi*_*ted 27
您还可以使用ForMember(),当设置为值的属性不在源对象中时,它还具有传递Mapper.AssertConfigurationIsValid()的标准单元测试的额外好处.
这是一个例子
Mapper.CreateMap<ClientData, GenerateClientLetterCommand>()
.ForMember(x => x.Id, opt => opt.MapFrom( o => Guid.NewGuid()))
.ForMember(x => x.Created, opt => opt.MapFrom( o => DateTime.Now));
Run Code Online (Sandbox Code Playgroud)