【问题标题】:Automapper - POST / PUT entity nesting hierarchyAutomapper - POST / PUT 实体嵌套层次结构
【发布时间】:2019-05-18 18:42:05
【问题描述】:

我想使用 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,它能够发布和更新 公司,创建/更新/删除和更改员工之间的关系。

如果知道一些员工可能还没有 ID,因为他们是新创建的,但他们是其他员工的父母,你会怎么做?

提前感谢您的帮助。

精度:我使用 dot net core 2.2、Entity Framework Core 和 AutoMapper。

【问题讨论】:

标签: asp.net-core .net-core entity-framework-core automapper


【解决方案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)

  1. 创建新员工,然后使用存储库中新生成的员工 ID 更新现有员工
  2. 或者,在存储库中获取所有要更新的员工(在上下文中加载),使用 EntityState.Added 在上下文中添加新员工。现在,将您获取的员工的经理分配给新员工的引用并保存您的上下文

【讨论】:

  • 感谢您的回答。所以这就是我的想法,我必须手动完成,我找不到让 automapper 自动完成的方法:(
猜你喜欢
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多