AutoMapper.Mapper में CreateMap के लिए परिभाषा नहीं है


85

यह एक मूल प्रश्न हो सकता है लेकिन सोच रहा हूं कि मुझे AutoMapper.Mapper.CreateMap विधि नहीं मिल रही है।

यहाँ छवि विवरण दर्ज करें

क्या मैं गलत AutoMapper संदर्भ / पैकेज का उपयोग कर रहा हूँ? धन्यवाद

जवाबों:


119

CreateMapविधि का स्थिर संस्करण 4.2 में पदावनत किया गया, फिर संस्करण 5.0 में एपीआई से हटा दिया गया। जिमी बोगार्ड ने इस ब्लॉग पोस्ट में इसके बारे में अधिक विस्तार से बात की है

मैपिंग की नई तकनीक गैर-स्थैतिक है, इस तरह (कोड पोस्ट से है):

var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<Source, Dest>();
});

IMapper mapper = config.CreateMapper();
var source = new Source();
var dest = mapper.Map<Source, Dest>(source);

1
धन्यवाद होगा, अगर आप सलाह दे सकते हैं कि आप कैसे उपयोग कर सकते हैं।
सामी

7
धन्यवाद मुझे नीचे जैसा तरीका मिला: दूसरों के लिए उपयोगी हो सकता है var configStack = new MapperConfiguration (cfg => {cfg.CreateMap <StackInfoVM, StackNameVM> ()। ForMember (dest => dest.stackId, opts => opts.Maprom) src => src.itemId));});
सामी

1
मेरे पास एक ही मुद्दा है, मैंने आपके सुझाव के अनुसार प्रयास किया है, लेकिन मुझे एक त्रुटि देता है The type or namespace name 'MapperConfiguration' could not be found (are you missing a using directive or an assembly reference?)और उसी के लिए IMapperआप मेरी मदद कर सकते हैं।
दिव्यांग देसाई

1
क्या मैं अपने सभी मॉडल के लिए एक ही विन्यास में सभी मानचित्रण विन्यास जोड़ सकता हूँ?
मास्टर प्रोग्रामर

2
@MasterProgrammer यप! मैं आमतौर पर इसके अंदर बनाए गए सभी मैपिंग के साथ स्थिर संपत्ति के रूप में बनाए गए कॉन्फ़िगरेशन को देखता हूं।
विल रे

42

यहाँ मैंने अपने कोड में AutoMapper का उपयोग कैसे किया है।

चरण 1: डाउनलोड AutoMapper के माध्यम से nuget-संकुल

संस्करण है

<package id="AutoMapper" version="6.1.1" targetFramework="net452" />

चरण 1: डीटीओ वर्ग बनाया गया

public class NotificationDTO
{

    public DateTime DateTime { get; private set; }
    public NotificationType Type { get; private set; }
    public DateTime? OriginalDateTime { get; private set; }
    public string OriginalVenue { get; private set; }
    public ConcertDTO Concert { get; set; }
}

public class ConcertDTO
{
    public int Id { get; set; }
    public bool IsCancelled { get; private set; }
    public DateTime DateTime { get; set; }
    public string Venue { get; set; }

}

चरण 2: एक AutoMapperProfile वर्ग बनाया गया है जो प्रोफ़ाइल से विरासत में मिला है

using AutoMapper;
using ConcertHub.DTOs;

namespace ConcertHub.Models
{
  public class AutoMapperProfile : Profile
  {
    public AutoMapperProfile()
    {
        CreateMap<Concert, ConcertDTO>();
        CreateMap<Notification, NotificationDTO>();
    }
  }
}

चरण 3: Global.asax फ़ाइल के अनुप्रयोग प्रारंभ विधि में पंजीकृत AutoMapperProfile

protected void Application_Start()
    {
        AutoMapper.Mapper.Initialize(cfg => cfg.AddProfile<AutoMapperProfile>());

    }

अंत में Api नियंत्रक में कोड का जादुई टुकड़ा

public IEnumerable<NotificationDTO> GetNewNotification()
    {
        var userId = User.Identity.GetUserId();
        var notifications = _dbContext.UserNotifications
                .Where(un => un.UserId == userId && !un.IsRead)
                .Select(un => un.Notification)
                .Include(n => n.Concert)
                .ProjectTo<NotificationDTO>()//use Automapper.QueryableExtension namespace
                .ToList();

        return notifications;
    }

आशा करता हूँ की ये काम करेगा ।


समझने में आसान। धन्यवाद।
नजीब


@ कैस्परोनियन आप सही प्रिय हैं :-)। खुशी है कि यह दूसरों की मदद की।
ksg

अच्छी तरह समझाया। धन्यवाद.बिटर को केवल कोड की पंक्तियों को डंप करने के बजाय एक अच्छे अभ्यास तरीके से समझाने के लिए।
जितेंद्र सावंत

19

यहाँ है कि यह अब कैसे काम करता है:

        Mapper.Initialize(cfg =>
        {
            cfg.CreateMap<SupervisorEmployee, SupervisorViewModel>()
            .ForMember
                (dst => dst.Name, src => src.MapFrom<string>(e => SupervisorViewModel.MapName(e)))
            .ForMember
                (dst => dst.OfficePhone, src => src.MapFrom<string>(e => e.OfficePhone.FormatPhone(e.OfficePhoneIsForeign)))
            .ForMember
                (dst => dst.HomePhone, src => src.MapFrom<string>(e => e.HomePhone.FormatPhone(e.HomePhoneIsForeign)))
            .ForMember
                (dst => dst.MobilePhone, src => src.MapFrom<string>(e => e.MobilePhone.FormatPhone(e.MobilePhoneIsForeign)));
        });

0

मुझे लगता है कि आपकी कक्षा AutoMapper.Profile से विरासत में नहीं मिली थी

मैंने ऐसा किया और मेरे लिए काम किया

public class AutoMapperConfig: AutoMapper.Profile
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.