2010-06-21 14 views
8

मैं अपने ऑब्जेक्ट्स को ऑटोमैपर के साथ डीटीओ में मैप करता हूं।ऑटोमैपर शून्य गुण

Mapper.Map<OrderItem, OrderItemDTO>(item) 

Missing type map configuration or unsupported mapping. 
+0

क्या आप कोड पोस्ट कर सकते हैं जहां आप मैपिंग बनाते हैं? –

उत्तर

21

बिना अपने मानचित्रण कोड भी देखा है यह वास्तव में क्या गलत हो रहा है कहना मुश्किल है, लेकिन मेरा अनुमान है कि यह है:

public class OrderItem : BaseDomain 
{ 
    public virtual Version Version { get; set; } 
    public virtual int Quantity { get; set; } 
} 




[DataContract] 
[Serializable] 
public class OrderItemDTO 
{ 
    [DataMember] 
    public int Id { get; set; } 
    [DataMember] 
    public string Guid { get; set; } 
    [DataMember] 
    public virtual int? VersionId { get; set; } 
    [DataMember] 
    public virtual string VersionName { get; set; } 
    [DataMember] 
    public virtual int Quantity { get; set; } 

} 

तो जब मैं अशक्त संस्करण के साथ OrderItem है, मैं एक अपवाद पर मिल आप निम्न के समान कोड के साथ अपने प्रकार मानचित्रण कर रहे हैं:

Mapper.CreateMap<OrderItem, OrderItemDTO>() 
     .ForMember(dest => dest.VersionId, options => options.MapFrom(orderitem => orderitem.Version.VersionId)) 
     .ForMember(dest => dest.VersionName, options => options.MapFrom(orderitem => orderitem.Version.VersionName)) 
     ; 

कोड ऊपर असफल हो जायेगी जब OrderItem.Version रिक्त है। इसे रोकने के लिए आप ForMember पर भेजे गए प्रतिनिधियों में शून्य की जांच कर सकते हैं:

Mapper.CreateMap<OrderItem, OrderItemDTO>() 
     .ForMember(dest => dest.VersionId, options => options.MapFrom(orderitem => orderitem.Version == null ? (int?) null : orderitem.Version.VersionId)) 
     .ForMember(dest => dest.VersionName, options => options.MapFrom(orderitem => orderitem.Version == null ? null : orderitem.Version.VersionName)) 
     ; 
+2

मैंने सोचा था कि automapper शून्य गुणों को संभालने के लिए पर्याप्त स्मार्ट होगा – Jordan

+5

@ जोर्डन: जब आप उपरोक्त उदाहरण में अपनी संरचना को फ़्लैट करने के लिए अपना स्वयं का मैपिंग बनाते हैं, जहां आप लैम्ब्डा "ऑर्डरिटम => ऑर्डरिटम.वर्सियन.विर्सियनआईडी" और ऑर्डरिटम का उपयोग करते हैं। वर्जन शून्य है, ऑटोमैपर का पता लगाने का कोई तरीका नहीं है कि लैम्ब्डा में कोई समस्या है। –

+0

आप किस संस्करण का उपयोग कर रहे हैं? –

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