为什么Automapper不能为基地工作?继承类

本文关键字:工作 继承 Automapper 不能 为什么 | 更新日期: 2023-09-27 18:07:17

在MVC应用程序中,有一个继承自ApplicationUser基类的Student类。. NET Identity),其中有一个ViewModel称为StudentViewModel,如下所示:

实体类:

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

ViewModel:

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

我使用以下方法通过将控制器中的StudentViewModel映射到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              
}

当使用这个方法时,我遇到一个错误:

UserManagerExtensions方法的类型参数。Update(UserManager, TUser)'不能从用法中推断出来。尝试显式指定类型参数。

有什么好办法吗?

为什么Automapper不能为基地工作?继承类

您得到的错误与AutoMapper无关。

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

var student = (Object)null;

应该是Student

删除上面的行并使用

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

或者改成

Student student = null;