2010-08-01 103 views
5

我曾经使用NHibernate的存储库接口。存储库模式与实体框架4

在EF中使用此模式的正确方法是什么?
如何才能实现这个存储库接口,为RepositoryBase<T>

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

回答

0

你基本上你的资料库说话哟你的对象范围内。只有改变我会做将让您的GETALL返回一个IEnumerable,而不是像这样:

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

由于某些原因,所有示例都将集合公开为IQueryable或IEnumerable。 EF4有一个用于此目的的接口 - IObjectSet(如果您使用最新的CTP,则为IDbSet)。

朱莉·勒曼有这样做,包括创建一个MockSet实现IObjectSet一个巨大的岗位,这样你就可以做一些断开的单元测试

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

+0

看起来像IObjectSet是EF特定的,因此我不喜欢存储库模式。要点是你不希望你的Irepository具有EF依赖 – Gluip 2011-07-24 11:00:03