2013-06-30 20 views
27

Secondo MSDN, DbContext è definito come:vantaggio di utilizzare unità di lavoro e modelli repository con Entity Framework

rappresenta una combinazione delle Unit-of-work e Repository modelli e vi permette di interrogare un database e gruppo insieme cambia che verrà quindi riscritto nel negozio come unità.

Dal DbContext implementa l'unità di lavoro e modelli di repository, allora perché questo ASP.NET tutorial e altre risorse che ho trovato su Internet dimostrano l'uso di DbContext con implementazioni personalizzate di l'unità di lavoro e dei modelli Repository? Non è ridondante?

Se non, qual è il vantaggio di creare implementazioni personalizzate di l'unità di lavoro e gli strati Repository quando si utilizza DbContext? (Posso vedere come questo potrebbe avere un senso all'interno di un progetto di test.)

risposta

48

Sì, DbContext rappresenta un'unità di lavoro e DbSet rappresenta un repository, ma alcune persone di creare un livello di astrazione su di loro. Ecco alcuni motivi per cui le persone potrebbero farlo:

  • Forse non vogliono che il loro progetto sia strettamente accoppiato a Entity Framework e alla sua architettura. Quindi, nascondono Entity Framework dietro quelle astrazioni in modo che possano sostituire Entity Framework per qualsiasi altro ORM senza alcuna modifica all'interfaccia del livello di accesso ai dati.
  • Utilizzano i repository per chiarire quali operazioni sono consentite per determinate entità. (ad esempio, CustomerRepository potrebbe consentire l'aggiunta e l'aggiornamento dei clienti ma non la cancellazione). D'altra parte, consente a uno sviluppatore client di riconoscere facilmente le operazioni disponibili per determinate entità. In altre parole, creano repository con convenzioni di denominazione e interfacce compatibili con la lingua del dominio.
  • Lo spostamento delle operazioni relative ai database negli archivi consente di intercettare tali operazioni ed eseguire la registrazione, l'ottimizzazione delle prestazioni o qualsiasi altra operazione desiderata.
  • Alcuni lo fanno per rendere più semplice il test. Suppongo di avere un'interfaccia ICustomerRepository con tre metodi. Quindi posso facilmente deriderlo invece di prendere in giro uno IDbSet<Customer> con troppi metodi.
  • Infine, ci sono molti che non lo fanno creare un astrazione su DbContext e DbSet. Li usano solo direttamente ed è perfettamente valido farlo.
1

Lo so che è troppo tardi

Per Unit-of-work: quando si sta tirando i dati dentro e fuori di una banca dati, è importante per tenere traccia di quello che hai changed.Similarly voi devi inserire nuovi oggetti tu creare e rimuovere qualsiasi oggetto che elimini.

È possibile modificare il database con ogni modifica al modello di oggetto, ma questo può portare a molte chiamate di database molto piccole.

Un'unità di lavoro tiene traccia di tutto ciò che viene fatto durante una transazione commerciale che può influire sul database.

Per modello di archivio: È un dominio aziendale isolato dal database.

Leggere il libro (PEAA)

Problemi correlati