অটোম্যাপার.ম্যাপারটিতে ক্রিয়েটম্যাপের সংজ্ঞা নেই


88

এটি একটি প্রাথমিক প্রশ্ন হতে পারে তবে ভাবছি আমি অটোম্যাপার.ম্যাপার.ক্রেইটম্যাপ পদ্ধতিটি পাচ্ছি না।

এখানে চিত্র বর্ণনা লিখুন

আমি কি ভুল অটোম্যাপার রেফারেন্স / প্যাকেজটি ব্যবহার করছি? ধন্যবাদ

উত্তর:


123

CreateMapপদ্ধতির স্থির সংস্করণটি ৪.২-এ অবচিত করা হয়েছিল, তারপরে সংস্করণ ৫.০-এ এপিআই থেকে সরানো হয়েছে। জিমি বোগার্ড এই ব্লগ পোস্টে আরও বিস্তারিতভাবে এই সম্পর্কে কথা বলেছেন ।

ম্যাপিংয়ের নতুন কৌশলটি অ-স্থিতিশীল, এর মতো (কোডটি পোস্ট থেকে এসেছে):

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

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

4
ধন্যবাদ উইল, আপনি কীভাবে কীভাবে ব্যবহার করবেন সে সম্পর্কে পরামর্শ দিতে পারেন কিনা তা ভেবে ধন্যবাদ জানাই For
সামি

7
ধন্যবাদ আমি নীচের মতটি খুঁজে পেয়েছি: অন্যদের জন্য সহায়ক হতে পারে var configStack = নতুন ম্যাপার কনফিগারেশন (cfg => f cfg.CreateMap <StackInfoVM, StackNameVM> () For forMember (গন্তব্য => ডাস্ট.স্ট্যাকআইডি, অপ্টস => অপ্টস M src => src.itemId))});
সামি

4
আমি একই ইস্যু করেছি, আপনার পরামর্শ অনুসারে চেষ্টা করেছি কিন্তু আমাকে একটি ত্রুটি দিয়েছে The type or namespace name 'MapperConfiguration' could not be found (are you missing a using directive or an assembly reference?)এবং IMapperক্যান দয়া করে আমাকে সাহায্য করুন।
দিব্যাং দেশাই

4
আমি কি আমার সমস্ত মডেলের জন্য একটি কনফিগারেশনে সমস্ত ম্যাপিং কনফিগারেশন যুক্ত করতে পারি?
মাস্টার প্রোগ্রামার

4
নিবন্ধন করুন আমি সাধারণত দেখতে পাই এর ভিতরে থাকা সমস্ত ম্যাপিং সহ স্থিতিশীল সম্পত্তি হিসাবে তৈরি হওয়া কনফিগারেশনটি।
রায় দেবে

45

আমি এখানে আমার কোডটিতে অটোম্যাপার ব্যবহার করেছি।

ধাপ 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: প্রোফাইল থেকে উত্তরাধিকার সূত্রে একটি অটোম্যাপারপ্রোফাই ক্লাস তৈরি করা হয়েছে

using AutoMapper;
using ConcertHub.DTOs;

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

ধাপ 3: নিবন্ধীকৃত AutoMapperProfile মধ্যে অ্যাপ্লিকেশন আরম্ভ পদ্ধতি Global.asax ফাইল

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

    }

পরিশেষে এপিআই কন্ট্রোলারে কোডের ম্যাজিক পিস

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;
    }

আশা করি এটা সাহায্য করবে .


বোঝা সহজ। ধন্যবাদ
নাজিব

9
এটি মোশির টিউটোরিয়ালটি
বহুবচন

@ ক্যাস্পেরোনিয়ান আপনি ঠিক প্রিয় :-)। আনন্দিত এটি অন্যদের সাহায্য।
কেএসজি

ভাল করে বুঝিয়েছি। ধন্যবাদ। ভাল কেবল কোডের লাইনগুলি ডাম্পিংয়ের পরিবর্তে একটি ভাল অনুশীলন পদ্ধতিতে ব্যাখ্যা করার জন্য ভাল et
জিতেন্দ্র সাওয়ান্ত

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

আমি দেখছি আপনার ক্লাসটি অটোম্যাপার থেকে উত্তরাধিকার সূত্রে আসে নি r

আমি এটি করেছি এবং আমার পক্ষে কাজ করেছি

public class AutoMapperConfig: AutoMapper.Profile
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.