2015-02-18 9 views
6

Ho un livello dati che contiene il mio EF6 DbFirst edmx, repository e AutoMapping.Quando dovrei usare AutoMapper e quando non lo sono

Ho anche un livello Modello con un Poco per ogni entità generata automaticamente nel mio livello Dati. Le proprietà corrispondono esattamente esattamente tranne alcune modifiche al nome.

AutoMapper viene installato solo sul mio DataLayer ed è qui che ho impostato tutti i miei mapping in un file di configurazione. A questo punto ho una mappatura da ciascuna entità DataLayer a ogni entità ModelLayer e ogni entità ModelLayer a ciascuna entità DataLayer. Qualsiasi modifica al nome è specificata nei mapping.

Poiché è impostato in questo modo nei miei metodi di salvataggio del repository, la funzione accetta un oggetto dal ModelLayer, ma viene quindi mappato su un oggetto DataLayer per poterlo inviare a DbContext. Quando si estraggono le informazioni nel mio repository, utilizzo DbContext per recuperare e quindi la funzione AutoMapper per mappare su Model in modo che la funzione possa tornare come Model.entity.

Il mio livello aziendale e l'app Web utilizzano solo le entità del modello. Se qualcosa sembra sbagliato su questo per favore fatemelo sapere.

L'altra cosa è la mappatura da ModelLayer a ViewModel e viceversa durante le azioni GET e POST nel mio controller. È normale mappare entrambi i modi anche qui? Devo installare AutoMapper sulla mia app Web a questo punto?

+0

"Quando dovrei utilizzare AutoMapper e quando non" <- rende i tipi privi di significato, quindi la risposta è "mai". –

+2

@MauricioScheffer: Non sono d'accordo, è perfettamente accettabile mappare dal modello interno a un viewmodel (verso l'esterno) o da un modello di validazione al modello interno (verso l'interno). –

+0

Quindi suppongo che non ci sia sbagliato o giusto. Se è necessario passare da un oggetto simile a un altro oggetto simile e non si desidera impostare manualmente le proprietà ogni volta che si utilizza AutoMapper. – JTunney

risposta

14

Uso AutoMapper quando voglio eliminare il noioso codice di sinistra sul lato destro. Se la logica non è completamente ovvia per copiare i dati, tornerò alla mappatura manuale.

In questi giorni, ciò significa che utilizzo le proiezioni LINQ di AutoMapper su tutti i GET e con parsimonia sui POST.

Problemi correlati