2012-11-04 19 views
5

मैं this example on AutoMapper's GirHub पढ़ा है, लेकिन उदाहरण मानता है कि सिर्फ एक ही InnerSource मैप करने के लिए जिस तरह से, कभी हो जाएगा:AutoMapper जटिल नेस्टेड मैपिंग

Mapper.CreateMap<OuterSource, OuterDest>(); 
Mapper.CreateMap<InnerSource, InnerDest>(); 
Mapper.AssertConfigurationIsValid(); 

var source = new OuterSource 
    { 
     Value = 5, 
     Inner = new InnerSource {OtherValue = 15} 
    }; 

var dest = Mapper.Map<OuterSource, OuterDest>(source); 
अपने प्रोजेक्ट के साथ

, मैं वस्तुओं serializing कर रहा हूँ एफई के साथ बनाया है कि परिपत्र संदर्भ हैं। इसका कारण यह है कि मुझे विभिन्न दिशाओं से वस्तुओं पर आने की आवश्यकता होगी। उदाहरण के लिए, यदि मैं उपयोगकर्ताओं की एक सूची मांगता हूं, तो मैं उन परियोजनाओं को देखना चाहता हूं जिनके साथ वे जुड़े हुए हैं। अगर मैं एक परियोजना के लिए पूछता हूं, तो मैं उस परियोजना से जुड़े उपयोगकर्ताओं को देखना चाहता हूं।

ये वृत्तीय संदर्भ काफी गहरी प्राप्त कर सकते हैं, User.Role.Project.TaskTime.User, User.TaskTime.Project.Task.TaskType.VisibleToRole.Role.User, आदि जैसे

तो मैं नेस्टेड मानचित्रण की जरूरत काफी गहरी है, और जिस तरह से यह किया है क्या पहले मानचित्रण था पर निर्भर करता है।

वर्तमान में मैं कर रहा हूँ:

Mapper.CreateMap<User, UserFull>() 
    .ForMember("TaskTimes", opt => opt.MapFrom(src => Mapper.Map<ICollection<TaskTime>, UserTaskTime>(src.TaskTimes))); 
Mapper.CreateMap<TaskTime, UserTaskTime>() 
    .ForMember("Task", opt => opt.MapFrom(src => Mapper.Map<Task, UserTaskTimeTask>(src.Task))); 
//... 

ViewModels कि टुकड़ा के लिए इस तरह दिखेगा:

public class UserFull 
{ 
    public string Email { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<TaskTime> TaskTimes { get; set; } 
    //... 
} 

public class UserTaskTime 
{ 
    public int Id { get; set; } 
    public Task Task { get; set; } 
    //... 
} 

public class UserTaskTimeTask 
{ 
    //... 
} 

यह सही है? क्या मुझे प्रत्येक सदस्य को व्यूमोडेल से प्रक्षेपित करना चाहिए और इसे प्रोजेक्शन का उपयोग करके हाथ से मैप करना चाहिए? या ऐसा करने के लिए एक क्लीनर तरीका है?

+0

क्या आप ViewModel से अपने डीबी इकाइयों में मूल्यों को मैप करने के लिए automapper का उपयोग कर रहे हैं? मैं दृढ़ता से सलाह देता हूं कि इन प्रयोजनों के लिए ऑटोमैपर का उपयोग न करें और इसे मैन्युअल रूप से करें, अन्यथा आप जटिल मैपर प्रोफाइल के साथ समाप्त हो जाएंगे जो असफल रहेगा यदि आप नए इकाइयों को जोड़ते हैं जो मैपिंग के लिए पुराने लोगों का उपयोग करते हैं। –

उत्तर

0

आप प्रत्येक सदस्य को नेस्टेड मानचित्रण प्रोजेक्ट कर सकते हैं। इसी तरह के उत्तर मैंने here पोस्ट किया है। आशा करता हूँ की ये काम करेगा।

+0

यह उत्तर नेस्टेड सरणी को फ़्लैट करने के बारे में है - मुझे लगता है कि वह http://stackoverflow.com/questions/13337063/nested-mappings-with-instance-version-of-automapper जैसे कुछ और के बाद है जहां संस्थाएं एक-दूसरे को संदर्भित करती हैं। – Mightymuke

+0

ओह - मैंने अभी देखा है कि यह वही पोस्टर है :) – Mightymuke

+0

हां, जब तक मैंने उस सवाल से पूछा कि मैंने ऑटोमैपर के इंस्टेंस संस्करण का उपयोग करके पता लगाया है, जो कि समस्या को हल करता है, मैं यहां –

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