接上一篇
基于EF4.1的异构数据库访问组件(二)中已完成了该组件的核心部分:
- IDbContextStorage – DbContext仓库
- IDbContextBuilder - DbContext动态组建器
- IDbContextManager – DbContext管理器
接下来,向大家介绍一下第一篇所说的,给上层提供统一的持久数据接口。
IRepository<T>
IRepository<T>就是需要提供给上层的统一数据持久接口,这里大家可以找到很多的例子,不多说,直接上类图:
上图中有以下几个主要部分:
- IRepository<T> - 数据持久接口
- SortOrder枚举 - 排序方式枚举
- IUnitOfWork - 工作单元接口
- UnitOfWork - 工作单元实现类
- EFRepository<T> - 数据持久实现基类
关于IUnitOfWork与IRepository<T>这块大家可以在园子里面找找文章,这里需要说明的是——我们怎样去确定哪个业务对象属于哪个数据库呢,关键在于EFRepository<T>这个基类的构造函数中:
PagedList<T>分页
在IRepository<T>中,我们提供了获取数据分页的方法。我采用的方法是使用PagedList<T>容器及扩展方法来实现的,EFRepository<T>的实现代码:
下面来看看PagedList<T>及扩展方法ToPagedList
关于排序
直接新增扩展方法OrderBy
多条件动态查询
参考:http://blogs.msdn.com/b/meek/archive/2008/05/02/linq-to-entities-combining-predicates.aspx
呵呵,差不多这个组件就是这样子了,我会把代码作一个整理放到Codeplex上面,到时有需要的朋友请关注,谢谢!