使用自引用类进行映射

时间:2013-03-11 09:26:15

标签: asp.net-mvc-4 automapper

我正在尝试使用automapper将以下Employee域对象映射到EmployeeViewModel。

我可以映射像Id,FirstName,LastName这样的属性。但无法映射下属属性。

使用Mapper.CreateMap<Employee, EmployeeViewModel>(),但不知道如何映射Subordinates属性。

任何人都可以帮助如何映射下面的课程。

public class Employee
{
  public int Id {get; set;}
  public int FirstName{get; set;}
  public int LastName{get; set;}
  public Employee Manager{get; set;}
}

public class EmployeeViewModel
{
  public int Id {get; set;}
  public int FirstName{get; set;}
  public int LastName{get; set;}
  public List<Employee> Subordinates {get; set;}
}

查看

@helper ShowTree(IEnumerable<EmployeeViewModel> emp)
{
<ul>
    @foreach (var e in emp)
    {
        <li>
            @e.FirsyName
            @if (e.Children.Any())
            {
                @ShowTree(e.Children)
            }
        </li>
    }
</ul>
}

谢谢, -Naren

1 个答案:

答案 0 :(得分:0)

因为Employee实体不包含名为Subordinates的List属性,所以它不会自动映射。要映射到下属属性,您需要将viewmodel下级属性更改为相同的类型,即名为manager的Employee对象。

public class Employee()
{
    public int Id {get; set;}
    public int FirstName{get; set;}
    public int LastName{get; set;}
    public Employee Manager {get; set;} 
}

public class EmployeeViewModel()
{
    public int Id {get; set;}
    public int FirstName{get; set;}
    public int LastName{get; set;}
    public Employee Manager {get; set;} 
}

但是,从上面看,没有必要映射对象,因为您的视图直接类似于您的域Employee对象。如果您需要更改域实体以表示视图,请仅使用视图模型。

目前还不清楚你要做什么,如果你显示你的观点,那么我将能够提供更多帮助。