2012-03-21 104 views
0

我想這樣創建的映射:AutoMapper和條件映射爲null

  • 如果源屬性有它的ID == 0,設置目標屬性設置爲null

  • 如果源屬性有它的ID = 0,使用默認配置

例如該物業地圖:

Mapper.CreateMap<ItemViewModel, Item>() 
    .ForMember(x => x.DestinationArticle, o => o.SetNullIfSourceHasIdZero(x => x.SourceArticle)); 

的DestinationArticle和SourceArticle特性是實現的:

public interface IEntity 
{ 
    long Id { get; set } 
} 

我目前的解決辦法是這樣的:

.ForMember(x => x.DestinationArticle, o => o.MapFrom(x => x.SourceArticle != null && x.SourceArticle.Id != 0 ? Mapper.Map<Article>(x.SourceArticle) : null)) 

這也不是那麼好,而不是通用的。

那麼,有沒有什麼辦法可以創建,SetNullIfSourceHasIdZero擴展方法或某事之前提到的,這可能使我的生活更輕鬆?

回答

0

嘗試沿着這些路線的東西..

Mapper.CreateMap<ItemViewModel, Item>() 
    .ForMember(x => x.DestinationArticle, opt => opt.ResolveUsing<SetNullIfSourceHasIdZero>()); 

public class SetNullIfSourceHasIdZero : ValueResolver<ItemViewModel, DestinationArticle> 
{ 
    protected override DestinationArticle ResolveCore(ItemViewModel item) 
    { 
     // logic here    
    } 
} 
+0

這意味着我要創建我SetNullIfSourceHasIdZero對我所有的視圖模型類,但那種映射情景...... – cryss 2012-03-22 15:05:42

+0

如何: '公類SetNullIfSourceHasIdZero :ValueResolver { 保護覆蓋ùResolveCore(T源) { /*邏輯* /} }' ,然後使用它利ke this: 'opt => opt.ResolveUsing >()' – 2014-11-20 08:33:31