为什么Automapper不适用于base&继承的类

时间:2016-09-17 07:21:21

标签: c# asp.net-mvc asp.net-identity automapper automapper-5

在MVC应用程序中,有一个继承自ApplicationUser基类(ASP.NET标识)的Student类,其中ViewModel名为StudentViewModel,如下所示:< / p>

实体类:

public class ApplicationUser : IdentityUser<int, ApplicationUserLogin,
                                     ApplicationUserRole, ApplicationUserClaim>, IUser<int>
{
    public string Name { get; set; }
    public string Surname { get; set; } 
    //code omitted for brevity
}

public class Student: ApplicationUser
{     
    public int? Number { get; set; }
}

视图模型:

public class StudentViewModel
{
    public int Id { get; set; }     
    public int? Number { get; set; }
    //code omitted for brevity
}

我使用以下方法通过将StudentViewModel映射到Controller中的ApplicationUser来更新学生:

[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Update([Bind(Exclude = null)] StudentViewModel model)
{
    //Mapping StudentViewModel to ApplicationUser ::::::::::::::::
    var student = (Object)null;

    Mapper.Initialize(cfg =>
    {
        cfg.CreateMap<StudentViewModel, Student>()
            .ForMember(dest => dest.Id, opt => opt.Ignore())
            .ForAllOtherMembers(opts => opts.Ignore());
    });

    Mapper.AssertConfigurationIsValid();
    student = Mapper.Map<Student>(model);
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

    //Then I want to pass the mapped property to the UserManager's Update method:
    var result = UserManager.Update(student);

    //code omitted for brevity              
}

使用此方法时,我遇到错误:

  

方法的类型参数&#39; UserManagerExtensions.Update(UserManager,TUser)&#39;无法从使用中推断出来。尝试明确指定类型参数。

有什么想法解决它吗?

1 个答案:

答案 0 :(得分:1)

您获得的错误与AutoMapper无关。

问题是,由于以下行,您的student变量的类型为object

var student = (Object)null;

虽然它应该是Student

删除上面一行并使用

var student = Mapper.Map<Student>(model);

或将其更改为

Student student = null;