2010-08-01 114 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