1

我有一个班级员工:

public partial class Employee
{
    public Employee()
    {
        this.Employees1 = new HashSet<Employee>();
    }

    public int Id { get; set; }
    public string Surname { get; set; }
    public string Email { get; set; }
    public Nullable<int> ReportsToId { get; set; }

    public virtual ICollection<Employee> Employees1 { get; set; }
    public virtual Employee ReportsTo { get; set; }
}

还有一个视图模型:

public class EmployeeEditModel : MappedViewModel<Employee>
{
    public int Id { get; set; }
    public string Surname { get; set; }
    public string FirstName { get; set; }
    public string Email { get; set; }
    public int? ReportsTo { get; set; }
}

MappedViewModel<T>声明一个方法:

public class MappedViewModel<TEntity>: ViewModel
{
    public virtual TEntity MapToEntity()
    {
        return (TEntity)Mapper.Map(this, GetType(), typeof(TEntity));
    }
}

当我调用MapToEntity一个动作方法时,像这样

我从 AutoMapper 收到异常消息:

缺少类型映射配置或不支持的映射。

映射类型:Int32 -> Employee System.Int32 -> Leave.Data.Employee

目标路径:Employee.ReportsTo.ReportsTo

源值:5

我的映射定义如下:

public static void RegisterMaps()
{
    Mapper.CreateMap<Employee, EmployeeCreateModel>();
    Mapper.CreateMap<EmployeeCreateModel, Employee>();
}

双重引用Employee.ReportsTo.ReportsTo告诉我这个异常是由某种循环映射怪癖引起的,但我能做些什么呢?至少我想ReportsTo从映射中省略,只需在调用MapToEntity. 我怎么能做到这一点,更确切地说,我应该为这种 AutoMapper 问题模式做些什么?

4

1 回答 1

0

您需要做的不仅仅是简单的事情Mapper.CreateMap,因为它不会神奇地弄清楚如何在EmployeeViewModel.ReportsTo( int?) 和Employee.ReportsTo( Employee) 之间进行转换。

要么在 and 之间创建一个映射intEmployee要么使用该ForMember方法告诉 AutoMapper 如何转换ReportsTo属性。

于 2012-10-11T06:12:28.040 回答