Automapper缺少地图配置

时间:2014-01-21 20:09:49

标签: c# .net automapper

我有一个参加者类和一个AttendeeViewModel

当我从AttendeeViewModel映射而不是参与者模型中已存在的值时,参加者模型上的日期时间字段被设置为默认的.NET日期时间

这是我的AttendeeViewModel

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

这是我的Base AttendeeModel

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

}

这是我的映射配置

public static void Configure()
    {

       Mapper.CreateMap<AttendeeViewModel, Attendee>().ForMember(dest=>dest.CreatedAt , opt=>opt.Ignore());

    } 

而继承人是控制者行动

[HttpPost]
    [ValidateAntiForgeryToken]
    public virtual ActionResult Edit(AttendeeViewModel attendee)
    {
        if (!_attendeeService.CanAddAttendee(attendee.Email, attendee.FilanthropyEventId))
        {
            AddEmailModelError();
        }

        if (ModelState.IsValid)
        {
            var mappedAttendee = _attendeeService.GetById(attendee.Id);

            mappedAttendee = Mapper.Map<AttendeeViewModel, Attendee>(attendee);
            _attendeeService.AddOrUpdate(mappedAttendee);
            return RedirectToAction(MVC.Attendee.Index(mappedAttendee.FilanthropyEventId));
        }
        return View(attendee);
    }

如果我将配置设置为此opt.Ignore()

的插入内容
Mapper.CreateMap<AttendeeViewModel, Attendee>().ForMember(dest=>dest.CreatedAt , opt=>opt.UseDestinationValue());

映射无法提供此异常

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

关于我如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:2)

如果要映射到现有对象,则需要使用占用现有目标的重载:

Mapper.Map<Source, Destination>(source, destination);

应该这样做。

答案 1 :(得分:0)

您是否尝试删除“.ForMember”部分并让AutoMapper忽略它?为了帮助您,看看这两个模型进行比较会很有帮助。

更新:看完您的模型后,我建议以下内容可以解决您遇到的问题......

Mapper.CreateMap <attendeeviewmodel, attendee>.ForMember (x => x.CreatedAt, opt => opt.MapFrom (src => datetime.utcnow));