2013-04-21 109 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