AutoMapper, Ошибка при вложенности - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Сразу перейду к делу - через nuget поставил Automapper и попытался настроить мэппинг.
Листинг программы
  1. public class RegisterViewModel
  2. {
  3. public string Email { get; set; }
  4. public string Login { get; set; }
  5. public string Password { get; set; }
  6. public string ConfirmPassword { get; set; }
  7. public string FirstName { get; set; }
  8. public string LastName { get; set; }
  9. public DateTime? BirthDay { get; set; }
  10. }public class ApplicationUser : IdentityUser
  11. {
  12. public virtual UserInfo UserInfo { get; set; }
  13. }public class UserInfo
  14. {
  15. public int Id { get; set; }
  16. public string FirstName { get; set; }
  17. public string LastName { get; set; }
  18. public DateTime RegisterDate { get; set; }
  19. public DateTime BirthDay { get; set; }
  20. public string MiddleName { get; set; }
  21. }
Необходимо произвести мэппинг из RegisterViewModel -> ApplicationUser таким образом, чтобы была сформирована модель

ApplicationUser

, у которой имелось свойство типа

UserInfo

с заполненными данными. При мэппинге получаю ошибку
Листинг программы
  1. "Error mapping types.
  2. Mapping types:
  3. RegisterViewModel -> ApplicationUser
  4. Type Map configuration: RegisterViewModel -> ApplicationUser
  5. Property: UserInfo"
Листинг программы
  1. Mapper.Initialize(init =>
  2. {
  3. init.CreateMap<RegisterViewModel, ApplicationUser>()
  4. .ForMember(dest => dest.UserInfo, e => e.MapFrom(scr => scr))
  5. .ForMember(dest => dest.UserName, e => e.MapFrom(src => src.Login))
  6. .ForMember(dest => dest.Email, e => e.MapFrom(src => src.Email));
  7. init.CreateMap<RegisterViewModel, UserInfo>()
  8. .ForMember(dest => dest.FirstName, e => e.MapFrom(src => string.IsNullOrEmpty(src.FirstName) ? "Not stated" : src.FirstName))
  9. .ForMember(dest => dest.BirthDay, e => e.MapFrom(src => (DateTime)src.BirthDay))
  10. .ForMember(dest => dest.LastName, e => e.MapFrom(src => string.IsNullOrEmpty(src.LastName) ? "Not stated" : src.LastName))
  11. .ForMember(dest => dest.RegisterDate, e => e.MapFrom(src => DateTime.Now.Date));
  12. }
  13. );Mapper.Initialize(init =>
  14. {
  15. init.CreateMap<RegisterViewModel, ApplicationUser>()
  16. .ForMember(dest => dest.UserInfo, e => e.MapFrom(src => new UserInfo() {
  17. BirthDay = (DateTime)src.BirthDay,
  18. FirstName = string.IsNullOrEmpty(src.FirstName) ? "Not stated" : src.FirstName,
  19. LastName = string.IsNullOrEmpty(src.LastName) ? "Not stated" : src.LastName,
  20. RegisterDate = DateTime.Now.Date
  21. }))
  22. .ForMember(dest => dest.UserName, e => e.MapFrom(src => src.Login))
  23. .ForMember(dest => dest.Email, e => e.MapFrom(src => src.Email));
  24. }
  25. );
В итоге в обоих случаях получаю одну и ту же ошибку - что не настроено правило мэпа для свойства

UserInfo

. Подскажите, пожалуйста, в чем я ошибся или как правильно настроить мэппинг при таких моделях? На англостэке находил подобный вариант и там описывался 1-й вариант правил. Спасибо.

Решение задачи: «AutoMapper, Ошибка при вложенности»

textual
Листинг программы
  1. namespace Mapping
  2. {
  3.     using System;
  4.     using AutoMapper;
  5.  
  6.     internal class Program
  7.     {
  8.         private static void Main()
  9.         {
  10.             var registerViewModel = new RegisterViewModel
  11.             {
  12.                 Email = "Test@mail.com",
  13.                 Login = "Login",
  14.                 Password = "pwd",
  15.                 ConfirmPassword = "pwd",
  16.                 FirstName = "Kos",
  17.                 LastName = "Kos",
  18.                 BirthDay = DateTime.UtcNow
  19.             };
  20.  
  21.             Mapper.Initialize(cfg =>
  22.             {
  23.                 cfg.CreateMap<RegisterViewModel, UserInfo>();
  24.  
  25.                 cfg.CreateMap<RegisterViewModel, ApplicationUser>()
  26.                     .ForMember(dest => dest.UserInfo,
  27.                         opt => opt.MapFrom(src => src));
  28.             });
  29.  
  30.             var model = Mapper.Map<ApplicationUser>(registerViewModel);
  31.         }
  32.     }
  33.  
  34.  
  35.     public class RegisterViewModel
  36.     {
  37.         public string Email { get; set; }
  38.         public string Login { get; set; }
  39.         public string Password { get; set; }
  40.         public string ConfirmPassword { get; set; }
  41.         public string FirstName { get; set; }
  42.         public string LastName { get; set; }
  43.         public DateTime? BirthDay { get; set; }
  44.     }
  45.  
  46.     public class ApplicationUser
  47.     {
  48.         public virtual UserInfo UserInfo { get; set; }
  49.     }
  50.  
  51.     public class UserInfo
  52.     {
  53.         public int Id { get; set; }
  54.         public string FirstName { get; set; }
  55.         public string LastName { get; set; }
  56.         public DateTime RegisterDate { get; set; }
  57.         public DateTime BirthDay { get; set; }
  58.         public string MiddleName { get; set; }
  59.     }
  60. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы