2010-08-01 6 views
5

J'avais l'habitude d'utiliser NHibernate avec des interfaces de référentiel.Modèle de référentiel avec Entity Frameworks 4

Quelle est la bonne façon d'utiliser ce modèle avec EF?
Comment puis-je implémenter cette interface de référentiel, pour un RepositoryBase<T>?

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

Répondre

0

Il existe plusieurs approches (la plupart d'entre elles sont assez similaires et ne diffèrent que légèrement), je vous recommande donc de faire quelques recherches et de choisir celle qui vous convient le mieux.

Avec EF 4, il est possible d'implémenter un référentiel générique en utilisant ObjectSet<T>. Jetez un oeil à quelques articles qui pourraient aider:

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

Vous avez essentiellement votre Référentiels parler yo votre contexte de l'objet. changer seulement je ferais serait d'avoir votre GetAll retourner un IEnumerable plutôt quelque chose comme:

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

Pour une raison quelconque, tous les exemples donnés exposent les collections comme IQueryable ou IEnumerable. EF4 a une interface pour ce but - IObjectSet (ou IDbSet si vous utilisez le dernier CTP).

Julie Lerman a un poste formidable à faire cela, y compris la création d'un MockSet qui implémente IObjectSet, de sorte que vous pouvez faire des tests unitaires déconnecté

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

+0

Semblable à IObjectSet est EF spécifique et donc je ne voudrais pas dans un modèle de dépôt. Point étant que vous ne voulez pas que votre Irepository ait une dépendance EF – Gluip

Questions connexes