Prendete questo database per esempioCome puoi gestire i riferimenti circolari durante la mappatura?
dipendenti
- id - int (PK)
- nome - varchar
Stipendio
- id - int (PK)
- employee_id - int (FK)
- importo - galleggiante
Entity Framework genererà modelli simili a questi:
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; }
}
L'emplyee fa riferimento a un elenco di i suoi stipendi mentre ogni stipendio indica a quale dipendente appartiene. Ciò si traduce in un problema di riferimento circolare.
Seguo un modello di repository e utilizzo AutoMapper per trasferire Dipendente a EmployeeDTO e Salario a SalaryDTO. Voglio che questi DTO informino le sue relazioni con i bambini. Tuttavia, non voglio farlo in modo ricorsivo. Potrei fare qualcosa di simile.
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; }
}
Ma questo sarebbe diventato un incubo di manutenzione.
Come posso dire a AutoMapper di mappare solo un singolo decantatore o raggiungere un obiettivo simile?
Poiché raddoppia la quantità di classi da modificare manualmente quando si desidera aggiungere/modificare il modello/database e la quantità di tripli della quantità di mappe che devo configurare. – Pluc
Questo è vero. Ma è qualcosa che non puoi evitare se vuoi separare il tuo modello di dominio dal resto della tua applicazione. Se il numero di oggetti dominio nel tuo progetto non è negli anni 100, allora è del tutto normale creare un DTO o anche più DTO che siano rilevanti per ogni operazione commerciale che hai. E AutoMapper dovrebbe rendere la vita molto più facile di dover fare tutto il plumbing di te stesso. Dover mantenere le modifiche nel dominio e nei livelli DTO è molto meglio che dover risolvere altri problemi derivanti dall'utilizzo del livello di dominio nel livello dell'interfaccia utente o del livello di servizio. – Kassem
Quello che ho difficoltà ad accettare è che AutoMapper in realtà non mi rende la vita più facile in termini di quante modifiche devo applicare se faccio una modifica nell'oggetto dominio. Invece di fare una lezione di bambino per ogni DTO nel progetto, potrei semplicemente fare una mappatura manuale e risulterebbe praticamente la stessa quantità di lavoro ... Ecco perché, nella mia testa, DEVE esserci un altro modo ... Non mi sembra proprio che sia giusto ... – Pluc