AutoMapper, Ошибка при вложенности - C#
Формулировка задачи:
Доброго времени суток.
Сразу перейду к делу - через nuget поставил Automapper и попытался настроить мэппинг.
Необходимо произвести мэппинг из
В итоге в обоих случаях получаю одну и ту же ошибку - что не настроено правило мэпа для свойства
public class RegisterViewModel { public string Email { get; set; } public string Login { get; set; } public string Password { get; set; } public string ConfirmPassword { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime? BirthDay { get; set; } }public class ApplicationUser : IdentityUser { public virtual UserInfo UserInfo { get; set; } }public class UserInfo { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime RegisterDate { get; set; } public DateTime BirthDay { get; set; } public string MiddleName { get; set; } }
RegisterViewModel -> ApplicationUser
таким образом, чтобы была сформирована модель ApplicationUser
, у которой имелось свойство типаUserInfo
с заполненными данными. При мэппинге получаю ошибку"Error mapping types. Mapping types: RegisterViewModel -> ApplicationUser Type Map configuration: RegisterViewModel -> ApplicationUser Property: UserInfo"
Mapper.Initialize(init => { init.CreateMap<RegisterViewModel, ApplicationUser>() .ForMember(dest => dest.UserInfo, e => e.MapFrom(scr => scr)) .ForMember(dest => dest.UserName, e => e.MapFrom(src => src.Login)) .ForMember(dest => dest.Email, e => e.MapFrom(src => src.Email)); init.CreateMap<RegisterViewModel, UserInfo>() .ForMember(dest => dest.FirstName, e => e.MapFrom(src => string.IsNullOrEmpty(src.FirstName) ? "Not stated" : src.FirstName)) .ForMember(dest => dest.BirthDay, e => e.MapFrom(src => (DateTime)src.BirthDay)) .ForMember(dest => dest.LastName, e => e.MapFrom(src => string.IsNullOrEmpty(src.LastName) ? "Not stated" : src.LastName)) .ForMember(dest => dest.RegisterDate, e => e.MapFrom(src => DateTime.Now.Date)); } );Mapper.Initialize(init => { init.CreateMap<RegisterViewModel, ApplicationUser>() .ForMember(dest => dest.UserInfo, e => e.MapFrom(src => new UserInfo() { BirthDay = (DateTime)src.BirthDay, FirstName = string.IsNullOrEmpty(src.FirstName) ? "Not stated" : src.FirstName, LastName = string.IsNullOrEmpty(src.LastName) ? "Not stated" : src.LastName, RegisterDate = DateTime.Now.Date })) .ForMember(dest => dest.UserName, e => e.MapFrom(src => src.Login)) .ForMember(dest => dest.Email, e => e.MapFrom(src => src.Email)); } );
UserInfo
. Подскажите, пожалуйста, в чем я ошибся или как правильно настроить мэппинг при таких моделях? На англостэке находил подобный вариант и там описывался 1-й вариант правил. Спасибо.Решение задачи: «AutoMapper, Ошибка при вложенности»
textual
Листинг программы
namespace Mapping { using System; using AutoMapper; internal class Program { private static void Main() { var registerViewModel = new RegisterViewModel { Email = "Test@mail.com", Login = "Login", Password = "pwd", ConfirmPassword = "pwd", FirstName = "Kos", LastName = "Kos", BirthDay = DateTime.UtcNow }; Mapper.Initialize(cfg => { cfg.CreateMap<RegisterViewModel, UserInfo>(); cfg.CreateMap<RegisterViewModel, ApplicationUser>() .ForMember(dest => dest.UserInfo, opt => opt.MapFrom(src => src)); }); var model = Mapper.Map<ApplicationUser>(registerViewModel); } } public class RegisterViewModel { public string Email { get; set; } public string Login { get; set; } public string Password { get; set; } public string ConfirmPassword { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime? BirthDay { get; set; } } public class ApplicationUser { public virtual UserInfo UserInfo { get; set; } } public class UserInfo { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime RegisterDate { get; set; } public DateTime BirthDay { get; set; } public string MiddleName { get; set; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д