2017-07-13 5 views
5

मेरी वेब एपीआई नियंत्रक विधि में, इससे पहले कि मैं UpdatePlaceDTO से PlaceMaster पर मैप करता हूं, मैं मैप द्वारा कवर नहीं किए गए गुणों को पॉप्युलेट करने के लिए डेटाबेस कॉल करता हूं लेकिन किसी कारण से ऑटोमैपर उन गुणों को शून्य बनाता है ।ऑटोमैपर 4.2 प्रोफाइल में गुणों को अनदेखा नहीं कर रहा है

var mappedPlaceMaster = _mapper.Map<PlaceMaster>(placeMasterDTO); 
// mappedPlaceMaster.EntityId is null 

मैं IgnoreExistingMembers के समाधान के लिए कई की कोशिश की है लेकिन उनमें से कोई काम करते हैं।

यह मैं

public class PlaceMapperProfile : Profile 
    { 

     protected override void Configure() 
     { 
      // TO DO: This Mapping doesnt work. Need to ignore other properties 
      //CreateMap<UpdatePlaceDto, PlaceMaster>() 
      // .ForMember(d => d.Name, o => o.MapFrom(s => s.Name)) 
      // .ForMember(d => d.Description, o => o.MapFrom(s => s.Description)) 
      // .ForMember(d => d.ParentPlaceId, o => o.MapFrom(s => s.ParentPlaceId)) 
      // .ForMember(d => d.LeftBower, o => o.MapFrom(s => s.LeftBower)) 
      // .ForMember(d => d.RightBower, o => o.MapFrom(s => s.RightBower)).IgnoreAllNonExisting(); 
     } 
    } 

इस विस्तार

public static IMappingExpression<TSource, TDestination> IgnoreAllNonExisting<TSource, TDestination>(this IMappingExpression<TSource, TDestination> expression) 
     { 
      foreach (var property in expression.TypeMap.GetUnmappedPropertyNames()) 
      { 
       expression.ForMember(property, opt => opt.Ignore()); 
      } 
      return expression; 
     } 

मैं मॉड्यूल का उपयोग किया है मेरी depedencies को नक्शाकार सुई

protected override void Load(ContainerBuilder builder) 
     { 
      //register all profile classes in the calling assembly 
      var profiles = 
       from t in typeof(Navigator.ItemManagement.Data.MappingProfiles.PlaceMapperProfile).Assembly.GetTypes() 
       where typeof(Profile).IsAssignableFrom(t) 
       select (Profile)Activator.CreateInstance(t); 

      builder.Register(context => new MapperConfiguration(cfg => 
      { 
       foreach (var profile in profiles) 
       { 
        cfg.AddProfile(profile); 
       } 


      })).AsSelf().SingleInstance(); 

      builder.Register(c => c.Resolve<MapperConfiguration>().CreateMapper(c.Resolve)) 
       .As<IMapper>() 
       .SingleInstance(); 
     } 

मैंने देखा है क्या है कुछ थ्रेड में _mapper.Map वास्तव में एक नई वस्तु बनाता है ताकि हम इसे मौजूदा प्रॉपर्टी में "एड-ऑन" कैसे क्रमबद्ध कर सकें v alues?

उत्तर

3

ठीक है मुझे समाधान मिला। यह मेरे सामने सही था लेकिन मैंने इसे नहीं देखा!

मुझे बस मानचित्र फ़ंक्शन का अधिभार उपयोग करना पड़ा जो प्लेसमास्टर का एक नया उदाहरण नहीं बनाता है बल्कि यह मानचित्र में उपलब्ध गुणों को असाइन करता है।

mappedPlaceMaster = _mapper.Map(placeMasterDTO, placeMasterFromDatabase); 
+0

अच्छी तरह से समाधान ढूंढने के लिए किया गया है! –

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