C# 自动映射缺少映射配置
我有一个Attendee类和一个AttendeeViewModelC# 自动映射缺少映射配置,c#,.net,automapper,C#,.net,Automapper,我有一个Attendee类和一个AttendeeViewModel public class AttendeeViewModel { public int Id { get; set; } [Required] [EmailAddress] public string Email { get; set; } [Required] [Display(Name = "First Name")] public string FirstName
public class AttendeeViewModel
{
public int Id { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Last Name")]
public string LastName { get; set; }
public int FEventId { get; set; }
public string DisplayName
{
get { return string.Format("{0}, {1}", FirstName, LastName); }
}
}
当我从AttendeeViewModel映射时,Attendee模型上的datetime字段将设置为默认的.NET datetime,而不是Attendee模型中已经存在的值
这是我的模型
public class AttendeeViewModel
{
public int Id { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Last Name")]
public string LastName { get; set; }
public int FEventId { get; set; }
public string DisplayName
{
get { return string.Format("{0}, {1}", FirstName, LastName); }
}
}
这是我的基本模型
public class Attendee
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Email { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
public DateTime CreatedAt { get; set; }
public bool IsActive { get; set; }
public int FEventId { get; set; }
public virtual ApplicationUser CreatedBy { get; set; }
public virtual FEvent FEvent { get; set; }
public ICollection<ProjectPledge> ProjectPledges { get; set; }
}
映射失败,导致此异常
Missing type map configuration or unsupported mapping.
Mapping types:
AttendeeViewModel -> DateTime
MyProject.Web.ViewModels.AttendeeViewModel -> System.DateTime
Destination path:
Attendee.CreatedAt.CreatedAt
Source value:
MyProject.Web.ViewModels.AttendeeViewModel
关于如何解决这个问题有什么想法吗?您是否尝试过删除“.ForMember”部分,让AutoMapper忽略它?为了更好地帮助您,请查看这两种模型以进行比较 更新:在看了你的模型后,我建议以下方法可以解决你的问题
Mapper.CreateMap <attendeeviewmodel, attendee>.ForMember (x => x.CreatedAt, opt => opt.MapFrom (src => datetime.utcnow));
Mapper.CreateMap.ForMember(x=>x.CreatedAt,opt=>opt.MapFrom(src=>datetime.utcnow));
如果要映射到现有对象,则需要使用获取现有目标的重载:
Mapper.Map<Source, Destination>(source, destination);
Mapper.Map(源、目标);
这应该可以解决问题。这里有一个技巧,在
Configure()
的末尾添加一个Mapper.AssertConfigurationsValid()
,这将导致在Configure()
中抛出异常,而不是等到第一次调用Map
时才抛出异常。(不知道如何解决您的问题,对不起:()是的,我一直在使用它,但无论如何,谢谢你仍然将目标数据时间设置为默认值。今晚稍后将发布模型。你对问题进行了排序吗?对不起,我应该在我的问题中更明确一点。我希望映射的值是attendee对象的原始值,而不是当前时间。你尝试添加了吗最后是“.IgnoreAllUnmapped()”吗?
Mapper.CreateMap <attendeeviewmodel, attendee>.ForMember (x => x.CreatedAt, opt => opt.MapFrom (src => datetime.utcnow));
Mapper.Map<Source, Destination>(source, destination);