2011-06-20 14 views
5

निम्नलिखित वर्गों को देखते हुए:ऑटोमैपर: स्वचालित ऑब्जेक्ट से स्रोत प्रॉपर्टी का नाम हल करें

public class User 
{ 
    public int Id {get;set;} 
    public PersonName Name {get;set;} 
} 

public class PersonName 
{ 
    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 


public class UserDto 
{ 
    public int Id {get;set;} 
    public string FirstName {get;set;} 
} 

और निम्न मैपिंग कॉन्फ़िगरेशन:

 Mapper.CreateMap<User, UserDto>() 
      .ForMember(destination => destination.FirstName, 
      options => options.MapFrom(source => source.Name.FirstName)) 

गंतव्य ऑब्जेक्ट पर किसी दिए गए प्रॉपर्टी के लिए स्रोत प्रॉपर्टी के नाम को हल करना संभव है:

कुछ ऐसा:

Assert.AreEqual(GetSourcePropertyName<User, UserDto>("FirstName"), "Name.FirstName") 

उत्तर

7

क्योंकि MapFrom() एक लैम्ब्डा लेता है, यह संभव है कि गंतव्य संपत्ति किसी भी चीज़ से मैप की गई हो। आप जो भी लैम्ब्डा चाहते हैं उसका उपयोग कर सकते हैं। इस पर विचार करें:

.ForMember(
    destination => destination.FullName, 
    options => options.MapFrom(source => source.Name.FirstName + " " + source.Name.LastName) 
); 

क्योंकि आप सरल संपत्ति एक्सेसर lambdas बनाने के लिए मजबूर नहीं कर रहे हैं, तो आप एक सरल संपत्ति नाम स्ट्रिंग के लिए स्रोत अभिव्यक्ति को कम नहीं कर सकते।

यदि MapFrom() ने Expression<Func<TSource, TMember>> लिया तो अभिव्यक्ति को स्ट्रिंग में बदलना संभव होगा, लेकिन यह वर्तमान में लिखे गए तरीके से नहीं किया जा सकता है।

संबंधित मुद्दे