2012-06-11 10 views
5

मैं अपने AccountEditViewModel (उपयोगकर्ता को संपादित करने के लिए उपयोग किया गया मॉडल देखें) और मेरे User (डेटाबेस में उपयोगकर्ता का प्रतिनिधित्व करने वाला डेटा मॉडल) के बीच एक ऑटोमैपर मैपिंग बना रहा हूं। यदि पासवर्ड फ़ील्ड भर गया है, तो मैं उस पासवर्ड को एन्क्रिप्ट करना चाहता हूं और इसे स्टोर करना चाहता हूं, हालांकि अगर यह शून्य है तो मैं पुराना पासवर्ड रखना चाहता हूं। मैंने नीचे दिए गए कोड को आजमाया है, हालांकि यह गलत है, मॉडल। अनदेखा() एक स्ट्रिंग मान वापस नहीं करता है। इसके बारे में जाने का सबसे अच्छा तरीका क्या है। क्या मैं इसे ForMember() विधि का उपयोग करके पूरा कर सकता हूं या क्या मुझे कस्टम रिज़ॉल्यूवर चाहिए?सी # Automapper संपत्ति को अनदेखा करें जब नल

Mapper.CreateMap<AccountEditViewModel, User>() 
       .ForMember(model => model.Password, model => model.MapFrom(user => user.Password != null ? EncryptPassword(user.Password) : model.Ignore())); 

उत्तर

8

इस प्रयास करें:

Mapper.CreateMap<AccountEditViewModel, User>() 
.ForMember(model => model.Password, model => model.Ignore()) 
.AfterMap((src, dst) => 
        { 
         if (src.Password != null) 
          dst.Password= EncryptPassword(src.Password); 

        }); 
+1

आप एक ForMember जोड़ने की जरूरत है (मॉडल => model.Password, मॉडल => model.Ignore()) से पहले AfterMap() फोन नक्शाकार नहीं रह गया है मैपिंग को संभालना –

+0

यह तब काम नहीं करता जब आप automapper के LinQ अभिव्यक्तियों का उपयोग करते हैं। – AgentFire

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