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