1 Câu hỏi: Làm cách nào để thực sự ánh xạ đối tượng Mô hình vào đối tượng ViewModel bằng AutoMapper trong ASP.Net core 2?

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Trên các lớp ASP.NET của tôi, tôi được yêu cầu phát triển một ứng dụng đọc dữ liệu đơn giản từ tệp .csv và sau đó hiển thị chúng trong chế độ xem. Tôi có một Mô hình mà tôi đang nhập dữ liệu từ tệp .csv. Tôi cũng có một ViewModel chứa các thuộc tính mà tôi thực sự muốn hiển thị trong chế độ xem của mình. Làm cách nào để xử lý Mô hình ánh xạ tới đối tượng ViewModel bằng AutoMapper?

Tôi đã tạo cấu hình cấu hình cho ánh xạ tôi muốn thực hiện, tôi đã đăng ký cấu hình trong tệp Startup.cs. Tôi va vào tường bất cứ khi nào tôi thực sự muốn thực hiện ánh xạ trong Trình điều khiển của mình vì tôi không biết cách xử lý ánh xạ Enumerables

Lớp người mẫu của tôi:

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

Lớp ViewModel của tôi:

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

    }

Lớp hồ sơ AutoMapper của tôi:

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



        }
    }

Cấu hình bên trong Startup.cs

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

            var mapper = config.CreateMapper();

Bây giờ đến vấn đề chính, đây là bộ điều khiển

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 là biến IEnumerable với dữ liệu từ csv. Tôi muốn ánh xạ đối tượng này và dữ liệu của nó tới một màn hình hiển thị IEDonatorViewModels của IE và chuyển nó vào chế độ xem của tôi thay vì chuyển vô số các đối tượng Đóng góp.

Giải pháp có thể thực sự dễ dàng và tôi đang thiếu một cái gì đó đơn giản nhưng tôi không thể tìm ra bất cứ điều gì sau khi xem tài liệu AutoMapper, nó có vẻ rất mơ hồ đối với tôi đặc biệt vì tôi là người mới

    
0
1 Câu trả lời                              1                         

Bản đồ liệt kê được tích hợp sẵn. Miễn là có ánh xạ cho các loại chung, AutoMapper có thể ánh xạ tới vô số các loại đó. Nói cách khác:

var displayDonatorViewModels = _mapper.Map<IEnumerable<DisplayDonatorViewModel>>(dataRecords);
    
1
2019-05-08 16: 05: 57Z
nguồn đặt đây