বৈশিষ্ট্যের নাম পৃথক হলে ম্যাপিংয়ের নিয়ম কীভাবে নির্দিষ্ট করবেন


144

আমি অটোম্যাপার কাঠামোর একটি নবাগত। আমার নিম্নরূপে একটি ডোমেন ক্লাস এবং একটি ডিটিও ক্লাস রয়েছে:

public class Employee
{
   public long Id {get;set;}
   public string Name {get;set;}
   public string Phone {get;set;}
   public string Fax {get;set;}
   public DateTime DateOfBirth {get;set;}
}

public class EmployeeDto
{
   public long Id {get;set;}
   public string FullName {get;set;}
   public DateTime DateOfBirth {get;set;}
}

দ্রষ্টব্য: শ্রেণীর সম্পত্তির নাম " নাম " Employeeশ্রেণীর সম্পত্তি " ফুলনাম " এর EmployeeDtoমতো নয়।

এবং এখানে Employeeঅবজেক্টটি ম্যাপ করার কোড রয়েছে EmployeeDto:

Mapper.CreateMap<Employee, EmployeeDto>(); // code line (***)
EmployeeDto dto = Mapper.Map<Employee, EmployeeDto>(employee); 

আমার প্রশ্নটি: আমি যদি Employee(উত্স শ্রেণি) মানচিত্রটি EmployeeDto(গন্তব্য শ্রেণি) করতে চান, তবে আমি কীভাবে ম্যাপিংয়ের নিয়মটি নির্দিষ্ট করতে পারি? অন্য কথায়, উপরের কোড লাইন (***) দিয়ে আরও কী করা উচিত?

উত্তর:


292

কিছু মনে করবেন না, আমি নিজেই একটি সমাধান পেয়েছি:

Mapper.CreateMap<Employee, EmployeeDto>()
    .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name));

1
কোন শ্রেণীর জন্য এটি উপস্থাপনের প্রত্যয় / প্রত্যয় জিনিসের মতো বিশ্বব্যাপী নির্দিষ্ট করার কোনও উপায় আছে কি? উদাহরণস্বরূপ, আমার কাছে একটি লাইব্রেরির অনেকগুলি ক্লাস রয়েছে যাতে প্রতিটি "স্থানীয়করণ" সম্পত্তি রয়েছে property এবং আমি তাদের ক্লাসে ম্যাপ করতে চাই যেখানে সংশ্লিষ্ট সম্পত্তিটিকে "লোকালাইজডনেম" বলা হয়। আমার একমাত্র বিকল্পটি প্রতিটি ম্যাপিং কনফিগারেশনে ফরমেমার যুক্ত করা হয়?
নিকআব

2
ম্যাপার ক্লাসে কোনও ক্রিয়েটম্যাপ পদ্ধতি নেই :(
নাভিদ_পিডিপি 11

3
@ নাভিদ_পিডিপি 11 হ্যাঁ আছে। আপনার স্ট্যাটিক ক্লাস ম্যাপার থাকা দরকার না
জর্ডি ভ্যান আইজক

@ জর্ডিওয়ানইজক আপনি কোন সংস্করণটি ব্যবহার করছেন যাটিতে একটি স্থির "ক্রিয়েটম্যাপ" পদ্ধতি রয়েছে? 5.1.1.0 এ তেমন কিছুই নেই
ম্যাট টমাস

6
@ ম্যাটথোমাস অটোম্যাপারের গিথুবটি একবার দেখার পরে আমি দেখতে পাচ্ছি যে সংস্করণ 5.0 হিসাবে ক্রিয়েটম্যাপ অপ্রচলিত এবং তারা বলেছে আপনাকে ম্যাপার কনফিগারেশন বা ম্যাপার ব্যবহার করতে হবে।
জর্ডি ভ্যান আইজক

7

কেবল উপরের মন্তব্যগুলিকে অটোম্যাপার 8.1 + ব্যবহার করে একটি আপডেট পদ্ধতির মধ্যে রোল করতে ...

var mapConfig = new MapperConfiguration(
   cfg => cfg.CreateMap<Employee, EmployeeDto>()
      .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name))
);

তারপরে আপনি ম্যাপকনফিগ ব্যবহার করে ম্যাপারটি তৈরি করবেন:

var mapper = mapConfig.CreateMapper();

2

আমরা ম্যাপিংয়ের জন্য শ্রেণি বৈশিষ্ট্যগুলিতেও নির্দিষ্ট করতে পারি

Https://docs.automapper.org/en/stable/Conventions.html#attribute-support থেকে

অ্যাট্রিবিউট সাপোর্ট

AddMemberConfiguration().AddName<SourceToDestinationNameMapperAttributesMember>(); * বর্তমানে সর্বদা চালু আছে

উত্স / ক্ষেত্রসমূহের জন্য সোর্সটোডেস্টেশনম্যাপারঅ্যাট্রিবিউটের উদাহরণগুলি সন্ধান করে এবং সদস্যের ম্যাচগুলি সন্ধানের জন্য ব্যবহারকারীদের সংজ্ঞায়িত ম্যাস ফাংশন কল করে।

ম্যাপটোঅ্যাট্রিবিউট তাদের মধ্যে একটি যা প্রদত্ত নামের উপর ভিত্তি করে সম্পত্তিটির সাথে মিলবে।

public class Foo
{
    [MapTo("SourceOfBar")]
    public int Bar { get; set; }
}

অন্য কোথাও কথায় কথায় কন্টেন্ট উদ্ধৃত করার সময়, পাঠকদের কাছে বিষয়বস্তু অনুলিপি করা হয়েছে তা পরিষ্কার করার জন্য ব্লক কোট ফর্ম্যাটিং ব্যবহার করতে ভুলবেন না।
টাইলার


স্ট্যাকওভারফ্লোতে খুব নতুন। শিওর নীচের নিয়মগুলি অনুসরণ করুন @ টাইলারএইচ
ডেভোপস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.