Entity Framework的横空出世确立了其在.net领域官方ORM中的霸主地位,给我们开发者带来了福音,但是使用使用上还是有些不便捷的地方,尤其是在三层架构的项目中,在业务层不容许出现直接操作ObjectContext 的情况下,需要针对不同实体编写不同DAO的工作是令人感到繁琐的。于是封装一个DaoTemplate类试图通过泛型手段涵盖所有可能的查询封装要解决几个问题:
1、持久层用一个类DaoTemplate尽量涵盖80%的查询需求,也可以根据需要编写子类进行扩展
2、业务层不容许直接操作ObjectContext对象,业务层只关注业务,可以调用DaoTemplate实现各种读写能力
3、业务层对持久层的多次调用要支持事务
4、业务层事务代码对于成员是透明的,程序员无需知道事务的存在,而只管在业务方法里面编写复杂的业务
我采用model first的思路,模型如下:
项目结构如下:
一些类的介绍:
下面这个类来自网络一位仁兄的博客,实现的是对Expression<Func<T, bool>>这种Lambda表达式提供And和Or扩展方法以实现动态查询中动态构造Lambda条件表达式的需要: