2012-10-03 57 views
1

我正在使用AutoMapper将一组Models映射到ViewModels。这一切都很好,但我必须一遍又一遍地为我创建的每个模型/视图模型做一件事。我必须将某个属性从(例如)String映射到Int使用AutoMapper的默认映射

所以我现在映射看起来是这样的:

Mapper.CreateMap<ModelOne, ModelOneViewModel>() 
    .ForMember (d => d.SomeProperty, opt => opt.ResolveUsing(t => Convert.ToString(t.SomeProperty))); 

Mapper.CreateMap<ModelOneViewModel, ModelOne>() 
    .ForMember (d => d.SomeProperty, opt => opt.ResolveUsing(t => Convert.ToInt32(t.SomeProperty))); 

Mapper.CreateMap<ModelTwo, ModelTwoViewModel>() 
    .ForMember (d => d.SomeProperty, opt => opt.ResolveUsing(t => Convert.ToString(t.SomeProperty))); 

// ... etc 

有没有办法告诉automapper,它应该始终映射SomePropertyString,当它从我的Models类映射到我的ViewModels类?

反之亦然,是不是就有可能告诉automapper的财产SomeProperty总是映射回一个Int32当它从ViewModels映射回Models

+0

要清楚,您希望转换基于'ModelOne'的属性名称(或视图模型的反之亦然)?应该是'ModelOne.SomeProperty'还是名称为'SomeProperty'的任何属性? – wal

+0

@wal ModelXXX和ModelXXXViewModel都具有相同的属性名称。它总是被称为'SomeProperty'。在'ModelXXX'中,这总是一个'Int32',在'ModelXXXViewModel'中它总是一个'String'。 - 因此,当我从'ModelXXX' *映射到*'ModelXXXViewModel'时,它应该**将**'SomeProperty'从'Int32'映射到'String'。 - 当我将**从ModelXXXViewModel *映射到* ModelXXX时,它总是应该将'SomeProperty'从'String'强制转换为'Int32'。 – w00

+0

@ w00不是[自定义类型转换器](http://automapper.codeplex.com/wikipage?title=Custom%20Type%20Converters)你在找什么? –

回答

1

根据您的评论请求,Custom Type Converters可能会派上用场。

我现在没有任何其他信息,上面提到的文章看起来好像是 解释得很好。

+0

谢谢,我解决了我以前的问题。它已经像魅力一样工作了! – w00

+0

@ w00很高兴能够提出正确的方向:) –