Jak radzić sobie z odniesieniami cyklicznymi podczas mapowania?
Weźmy na przykład tę bazę danych
Pracownik
id - int (PK)nazwa - varcharWynagrodzenie
id - int (PK)employee_id - int (FK)kwota - pływakEntity Framework wygeneruje modele podobne do tych:
public partial class Employee
{
public Employee()
{
this.Salaries = new HashSet<Salary>();
}
public int id { get; set; }
public string name { get; set; }
}
public partial class Salary
{
public int id { get; set; }
public int employee_id { get; set; }
public float amount { get; set; }
public Employee employee { get; set; }
}
Emplyee odwołuje się do listy swoich pensji, podczas gdy każda pensja wskazuje, który pracownik jest właścicielem. Powoduje to kolisty problem odniesienia.
Podążam za wzorcem repozytorium i używam AutoMappera do przeniesienia pracownika do EmployeeDTO i wynagrodzenia do SalaryDTO. Chcę, aby te DTO utrzymywały informacje o relacjach dzieci. Jednak nie chcę tego robić rekurencyjnie. Mogę zrobić coś takiego.
public partial class EmployeeDTO
{
public EmployeeDTO()
{
this.Salaries = new HashSet<SalaryChildDTO>();
}
public int id { get; set; }
public string name { get; set; }
}
public partial class SalaryChildDTO
{
public int id { get; set; }
public float amount { get; set; }
}
Ale to stanie się koszmarem konserwacyjnym.
Jak mogę powiedzieć AutoMapperowi, aby mapował tylko jednego podejrzanego lub osiągnął podobny cel?