1 Soalan: Bagaimana hendak memetakan objek model ke objek ViewModel menggunakan AutoMapper dalam inti ASP.Net 2?

soalan dicipta di Wed, May 8, 2019 12:00 AM

Pada kelas ASP.NET saya telah diberitahu untuk membangunkan data bacaan aplikasi mudah dari fail .csv dan kemudian memaparkannya dalam pandangan. Saya mempunyai Model yang saya mengimport data dari fail .csv. Saya juga mempunyai ViewModel yang mengandungi sifat yang saya ingin paparkan dalam pandangan saya. Bagaimana untuk mengendalikan Pemetaan Model ke objek ViewModel dengan AutoMapper?

Saya mencipta profil konfigurasi untuk pemetaan yang ingin saya lakukan, saya mendaptkan konfigurasi dalam fail Startup.cs. Saya memukul dinding setiap kali saya mahu melakukan pemetaan di Pengawal saya kerana saya tidak tahu cara mengendalikan pemetaan Enumerables

Kelas Model saya:

public class Donation
    {
        public string First_Name { get; set; }
        public string Last_Name { get; set; }
        public long Pesel { get; set; }
        public string Donation_date { get; set; }
        public string Donated_blood_amount { get; set; }
        public string Blood_type { get; set; }
        public string Blood_factor { get; set; }
        public string Address { get; set; }
    }

Kelas ViewModel saya:

public class DisplayDonatorViewModel
    {
        public string First_Name { get; set; }
        public string Last_Name { get; set; }
        public string Donated_blood_amount { get; set; }

    }

Kelas profil AutoMapper saya:

public class DisplayDonatorViewModelProfile : Profile
    {
        public DisplayDonatorViewModelProfile()
        {

            CreateMap<Donation, DisplayDonatorViewModel>()
                .ForMember(destination => destination.First_Name, h => h.MapFrom(source => source.First_Name))
                .ForMember(destination => destination.Last_Name, h => h.MapFrom(source => source.Last_Name))
                .ForMember(destination => destination.Donated_blood_amount, h => h.MapFrom(source => source.Donated_blood_amount));



        }
    }

Konfigurasi di dalam Startup.cs

var config = new MapperConfiguration(cfg => {
                cfg.AddProfile<DisplayDonatorViewModelProfile>();
            });

            var mapper = config.CreateMapper();

Sekarang untuk masalah utama, inilah pengawal

public class DonationsController : Controller
    {
        private readonly IHostingEnvironment _env;
        private readonly IMapper _mapper;
        public DonationsController(IHostingEnvironment env, IMapper mapper)
        {
            _env = env;
            _mapper = mapper;
        }

        public IActionResult Index()
        {
            string webRootPath = _env.WebRootPath;
            string dataFolder = "data";
            string fileName = "MOCK_DATA.csv";
            string csvFilePath = Path.Combine(webRootPath, dataFolder, fileName);
            IEnumerable<Donation> dataRecords;
            IEnumerable<DisplayDonatorViewModel> displayDonatorViewModels;

            using (var reader = new StreamReader(csvFilePath))
            using (var csv = new CsvReader(reader))
            {
                dataRecords = csv.GetRecords<Donation>().ToList();

            }            
            displayDonatorViewModels = _mapper.Map<Donation, DisplayDonatorViewModel>(dataRecords); //does not work, "cannot convert from 'System.Collections.Generic.IEnumerable<BloodDonatorsApp.Models.Donation>' to 'BloodDonatorsApp.Models.Donation'

            return View(dataRecords);
        }
    }

dataRecords adalah pembolehubah IEnumerable dengan data dari csv. Saya ingin memetakan objek ini dan datanya kepada paparan IEnumerableDonatorViewModels dan menyampaikannya kepada pandangan saya dan bukannya menyebarkan objek Donasi yang banyak.

Penyelesaiannya mungkin benar-benar mudah dan saya kehilangan sesuatu yang mudah tetapi saya tidak faham apa-apa selepas melihat dokumentasi AutoMapper, nampaknya sangat samar untuk saya terutamanya kerana saya pemula

    
0
1 Jawapan                              1                         

Pemetaan enumerables terbina dalam. Selagi ada pemetaan untuk jenis generik, AutoMapper boleh memetakan kepada nombor-nombor jenis tersebut. Dengan kata lain:

var displayDonatorViewModels = _mapper.Map<IEnumerable<DisplayDonatorViewModel>>(dataRecords);
    
1
2019-05-08 16: 05: 57Z
sumber diletakkan di sini