我想使用DTO和AutoMapper对包含嵌套实体列表并具有层次结构的实体进行POST和PUT。
样品:
一家公司有一个雇员列表。在此员工列表中,可以有一个经理,该经理也是同一家公司的员工。
public class Company {
public int Id { get; set; }
public List<Employee> Employees { get; set; }
}
public class Employee {
public int Id { get; set; }
public Company Company { get; set; }
public int CompanyId { get; set; }
public Employee Manager { get; set; }
public int? ManagerId { get; set; }
}
我想创建一个DTO,该DTO可以发布和更新公司,以创建/更新/删除和更改员工之间的关系。
您将如何知道某些员工由于新创建而没有ID,而又是其他员工的父母呢?
预先感谢您的帮助。
精度:我使用点网核心2.2,实体框架核心和AutoMapper。
答案 0 :(得分:1)
您可以按照以下步骤进行操作。
public class CompanyDto {
public int Id { get; set; }
//Below line cannot exist here, otherwise it will create circular references
//public List<Employee> Employees { get; set; }
}
public class EmployeeDto {
public int Id { get; set; }
public Company Company { get; set; }
public int CompanyId { get; set; }
public Employee Manager { get; set; }
public int? ManagerId { get; set; }
}
此后,您可以在自动映射器配置中为Company-> CompanyDto(和反向映射)和Employee到EmployeeDto(和反向映射)创建映射。
现在,要处理现有员工新经理的情况,您可以在存储库中执行以下任一操作(使用实体对象,而不是DTO)