Automapper - иерархия вложенности сущностей POST / PUT - PullRequest
0 голосов
/ 18 декабря 2018

Я хотел бы использовать 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, способный POST и ОБНОВЛЯТЬ Company создание / обновление / удаление и изменение отношений между сотрудниками.

Как бы вы поступили, зная, что у некоторых сотрудников еще нет идентификатора, потому что они недавно созданы, но являются родителями других сотрудников?

Спасибозаранее за помощь.

Точность: я использую dot net core 2.2, Entity Framework Core и AutoMapper.

1 Ответ

0 голосов
/ 19 декабря 2018

Вы можете сделать это, как показано ниже.

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 to EmployeeDto (и обратная карта).

Теперь, для обработки дела нового менеджера с существующим сотрудником, вы делаете одно из следующих действий в своем хранилище (с объектами сущностей, а не с DTO)

  1. Создайте нового сотрудника изатем обновите существующих сотрудников с помощью вновь созданного идентификатора сотрудника в вашем хранилище
  2. Или получите всех сотрудников, которых вы хотите обновить, в своем хранилище (загрузить в контексте), добавьте нового сотрудника в контексте с EntityState.Added,Теперь назначьте менеджера сотрудников, которого вы выбрали, со ссылкой на нового сотрудника и сохраните ваш контекст
...