2013-04-21 237 views
0

庫模式創建我有EF代碼優先庫模式時,我沒有把握的東西。如果我想抽象出EF,我將不得不使我的存儲庫的類型爲IObjectContextAdapter,否?這是DbContext實現的。如果我稍後轉而使用NHibernate或其他第三方ORM,它可能不會實現IObjectContextAdapter。與EF代碼優先

是我創建一個包裝的ORM並不會返回IObjectContextAdapter的實現的包裝唯一的解決辦法?如果是這樣,那有什麼意義?

+0

我不繼,該庫必須是類型'IObjectContextAdapter'邏輯。也許一些示例代碼會有所幫助。 – 2013-04-21 20:20:53

+0

不久之後會添加一個代碼示例,但同時,我的意思是,如果我有一個在存儲庫上執行操作的類,那麼我將指定一個屬性,該類是存儲庫必須具有的抽象類型。所以公共IObjectContextAdapter Repository {get;組; }然後在我的方法,我只會做這樣的事情.Repository.Save();等 – Gho5t 2013-04-21 20:30:49

+0

我仍然不關注。爲什麼不定義一個接口'IRepository'創建實際的'EFRepository'使一個構造函數的'IDbContext'時有一個'Save',然後。堅持下去並在實現IRepository.Save()時使用它。然後,你的屬性被定義爲'public IRepository Repository {get;組; }'等 – 2013-04-21 20:33:21

回答

0

我不知道你有創造與EF存儲庫模式時實現IObjectContextAdapter。使用EF或類似的NHibernate之間的主要區別將如何分別要麼DbContextISession包裹。

這裏的EF代碼優先庫是如何被寫成草圖:

public interface IRepository<TEntity> 
{ 
    void Save(); 
} 


public class Repository<TEntity> : IRepository<TEntity> 
{ 
    private readonly IDbSet<TEntity> entitySet; 

    public Repository(DbContext context) 
    { 
     this.entitySet = context.Set<TEntity>(); 
    } 

    public void Save() 
    { 
     return this.entitySet.SaveChanges(); 
    } 
} 

這使得實際DbContext被注入。

+0

什麼是IDbContext? NHibernate實現了那個? – Gho5t 2013-04-21 20:59:38

+0

對不起,我的意思是DbContext。現在更新。 – 2013-04-22 07:58:05

+0

好,所以你在我的EF實現中說我可以讓構造函數接受一個DbContext,並在我的其他實現中,我可以使其他東西? – Gho5t 2013-04-22 13:33:25