我有一个班级员工:
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 - &gt; Employee System.Int32 - &gt; 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问题模式做些什么呢?
答案 0 :(得分:0)
您需要做的不仅仅是简单Mapper.CreateMap
,因为它不会神奇地弄清楚如何在EmployeeViewModel.ReportsTo
(int?
)和Employee.ReportsTo
之间进行转换({{1} })。
在Employee
和int
之间创建映射,或使用Employee
方法告诉AutoMapper如何转换ForMember
属性。