2010-08-01 20 views
5

Ho usato NHibernate con le interfacce del repository.Schema del repository con Entity Frameworks 4

Qual è il modo corretto di utilizzare questo modello con EF?
Come posso implementare questa interfaccia di repository, per un RepositoryBase<T>?

public interface IRepository<T> 
{ 
    T GetById(object id); 
    void Save(T entity); 
    T[] GetAll(); 
    void Delete(T entity); 
} 

risposta

0

Ci sono diversi approcci (la maggior parte sono abbastanza simili e solo leggermente diversi), quindi consiglierei di fare qualche ricerca e scegliere quale si adatta meglio.

Con EF 4 è possibile implementare un repository generico utilizzando ObjectSet<T>. Date un'occhiata a un paio di articoli che potrebbero aiutare:

http://devtalk.dk/2009/06/09/Entity+Framework+40+Beta+1+POCO+ObjectSet+Repository+And+UnitOfWork.aspx

http://www.forkcan.com/viewcode/166/Generic-Entity-Framework-40-Base-Repository

0

Che, fondamentalmente, sono i repository parlare yo vostro contesto oggetto. solo cambiare vorrei fare sarebbe avere il GetAll restituire un qualcosa di IEnumerable invece simile:

public class SomeObjectRepo : IRepository<SomeObject> 
{ 
    SomeContext GetById(object id) 
    { 
     using(var context = new MyContext()) 
     { 
      return context.SomeObjects.First(x=>x.id.Equals(id)); 
     } 
    } 

etc... 
} 
2

Per qualche motivo, tutti gli esempi riportati espongono le raccolte come IQueryable o IEnumerable. EF4 ha un'interfaccia per questo scopo: IObjectSet (o IDbSet se stai utilizzando l'ultimo CTP).

Julie Lerman ha un enorme post su questo modo, compresa la creazione di un MockSet che implementa IObjectSet, in modo da poter fare un po 'scollegato unit testing

http://thedatafarm.com/blog/data-access/agile-entity-framework-4-repository-part-6-mocks-amp-unit-tests/

+0

Sembra come IObjectSet è specifico EF e quindi non mi piacerebbe in un modello di repository. Il punto è che non vuoi che il tuo Irepository abbia una dipendenza da EF – Gluip

Problemi correlati