2009-08-10 4 views
5

मैं निम्नलिखित वर्ग के लिए AutoMapper + एफई (संस्थाओं => POCO) का उपयोग कर रहा:ऑटोमैपर त्रुटि को कैसे हल करें? (Stackoverflow अपवाद!)

public class Category 
{ 
    public int CategoryID { get; set; } 

    public string Name { get; set; } 

    public Category Parent { get; set; } 

    public IList<Category> Children { get; set; } 
} 

इस वर्ग के बाद से ही (माता-पिता/बच्चे) के साथ संबंध नहीं है, AutoMapper पागल हो गया था और एक फेंक दिया Stackoverflow अपवाद। क्या आपने कभी इस समस्या का अनुभव किया है?

उत्तर

2

मैंने कस्टमवैल्यू रिसोल्वर बनाकर इसका समाधान किया है। यह करने के लिए सुंदर बात नहीं है, लेकिन यह काम कर रहा है।

Mapper.CreateMap<Category, CategoryDTO>() 
       .ForMember(c => c.Parent, opt => opt.ResolveUsing<ParentResolver>()) 
       .ForMember(c => c.Children, opt => opt.ResolveUsing<ChildrenResolver>()); 

Mapper.CreateMap<CategoryDTO, Category>() 
       .ForMember(c => c.Parent, opt => opt.ResolveUsing<ParentDTOResolver>()) 
       .ForMember(c => c.Children, opt => opt.ResolveUsing<ChildrenDTOResolver>()); 


public class ParentResolver : ValueResolver<Category, CategoryDTO> 
    { 
     protected override CategoryDTO ResolveCore(Category category) 
     { 
      CategoryDTO dto = null; 

      if (category.Parent != null) 
       dto = Mapper.Map<Category, CategoryDTO>(category.Parent); 

      return dto; 
     } 
    } 

    public class ParentDTOResolver : ValueResolver<CategoryDTO, Category> 
    { 
     protected override Category ResolveCore(CategoryDTO category) 
     { 
      Category poco = null; 

      if (category.Parent != null) 
       poco = Mapper.Map<CategoryDTO, Category>(category.Parent); 

      return poco; 
     } 
    } 

    public class ChildrenResolver : ValueResolver<Category, EntityCollection<CategoryDTO>> 
    { 
     protected override EntityCollection<CategoryDTO> ResolveCore(Category category) 
     { 
      EntityCollection<CategoryDTO> dtos = null; 

      if (category.Children != null && category.Children.Count > 0) 
       dtos = Mapper.Map<IList<Category>, EntityCollection<CategoryDTO>>(category.Children); 

      return dtos; 
     } 
    } 

    public class ChildrenDTOResolver : ValueResolver<CategoryDTO, IList<Category>> 
    { 
     protected override IList<Category> ResolveCore(CategoryDTO category) 
     { 
      IList<Category> pocos = null; 

      if (category.Children != null && category.Children.Count > 0) 
       pocos = Mapper.Map<EntityCollection<CategoryDTO>, IList<Category>>(category.Children); 

      return pocos; 
     } 
    } 
+1

क्या आप गंतव्य प्रकार भी पोस्ट कर सकते हैं? मुझे यह बग ठीक करना अच्छा लगेगा। –

-1

यह एक ज्ञात समस्या प्रतीत होता है। Automapper एक infinate पाश में चला जाता है।

यहाँ जो इस समस्या को हल करने में कामयाब किसी के लिए एक लिंक है:

http://blogs.ugidotnet.org/lmauri/archive/2009/05/02/automapper-efpocogenerator-entityframework-and-associations.aspx

यहाँ जोड़ें इस पेज के अनुवादित संस्करण के लिए एक लिंक है :)

http://translate.google.com/translate?hl=en&sl=it&u=http://blogs.ugidotnet.org/lmauri/archive/2009/05/02/automapper-efpocogenerator-entityframework-and-associations.aspx&ei=UneASvahFoPe-Qa_38RU&sa=X&oi=translate&resnum=2&ct=result&prev=/search%3Fq%3Dstackoverflow%2Bautomapper%26hl%3Den%26sa%3DN%26start%3D20