2009-05-20 15 views
6

Stato occupato a creare una nuova app, in pratica ho il mio dataccess, livello di servizio e livello di presentazione ... Tutto funziona alla grande ma sto usando le classi di entità che vengono restituite da EF. Problema qui li ho passati al livello di presentazione quindi ho bisogno di aggiungere il riferimento/dataccess al livello di presentazione - NOT GOOD:Automapper da utilizzare con Entity Framework utilizzando il modello di repository?

Quindi la mia idea era la seguente e cercavo aiuto e conferma che sono scendendo nella giusta direzione ...

  1. Creare un insieme di classi nello strato di servizio come cliente, ordinare, ecc, perché il livello di presentazione ha un riferimento al livello di servizio ..

  2. Quando un cliente l'entità viene restituita nel dataccess restituirei la classe entity ovvero Customer al servizio an Farei la mappatura qui - Non sono troppo sicuro se mi piace questo?

  3. dove sarebbero i posti migliori per queste "classi standard" che uso per la mappatura, se li metto nel livello di servizio e faccio la mappatura del dataaccess allora questo creerebbe un riferimento circolare come Dataccess> servizio e servizio> DataAccess .. - dovrebbe essere solo un modo cioè di servizio> DataAccess

stavo pensando di utilizzare Automapper (http://www.codeplex.com/AutoMapper) per prendersi cura di questo, io sono sulla strada giusta ??? Qualsiasi idea o esempio è davvero apprezzato ..

Come dico la sola cosa è che quando ritorno da dataaccess a livello di servizio (usando Iqueryable) ho bisogno di mapparli a partire dalle classi di entità e utilizzare classi di raccolta standard ..

Penso che questo sia il punto in cui mi confondo, mi sembra che non sia corretto usare le classi di entità perché ciò significa che ho bisogno di un riferimento al framework entità/dataaccess nel mio livello di presentazione per poter accedere alle classi di entità.

risposta

3

Hai colpito uno dei punti deboli di EF v1. Per ora, sì, percorrere la rotta con AutoMapper ti consente sicuramente di convertire le tue entità EF in entità aziendali "dirette" e usarle nel tuo livello superiore.

Inoltre, EF v4, che è dovuto a .NET 4.0/Visual Studio 2010, dovrebbe apportare molto sollievo in molte delle aree problematiche: supporto per i propri POCO semplici (Plain Old CLR Objects) e molti Di Più. Controlla lo EF Design Blog. La squadra ha pubblicato un numero di post molto interessanti e molto promettenti ultimamente, per quanto riguarda EF v4. Non vedo l'ora!

Marc

0
  1. È possibile utilizzare gli oggetti EF nel progetto Web se si estrae le loro interfacce nel progetto core/comune e restituire i tipi di interfaccia dal repository o servizi, che il progetto Web utilizza. È possibile rendere gli oggetti EF implementano le interfacce, con la creazione di classi parziali e aggiungendo proprio lì:

    parziale classe Cliente: ICustomer

  2. Anche se si può fare 1. trucco, probabilmente dovreste comunque utilizzare automapper per map quelle entità ai tuoi oggetti ViewModel personalizzati, che si adattano alla tua vista particolare.È inoltre possibile rendere direttamente i metodi di query di repository/services restituendo DTO/ViewModels, consentendo di rendere le query più efficienti a volte (richiedendo solo le colonne necessarie ecc.), Ma ciò richiederebbe ulteriori mapping EF.

Problemi correlati