- public abstract class BaseDAL : IDALInterface,IDisposable
- {
- protected abstract ICUDMapper GetMapper();
- //CUD 持久化操作
- /// <summary>
- /// 创建新的对象
- /// </summary>
- /// <param name="model"></param>
- /// <returns></returns>
- public int Create(object model)
- {
- return GetMapper().Create(model);
- }
- /// <summary>
- /// 更新对象
- /// </summary>
- /// <param name="model"></param>
- /// <returns></returns>
- public int Update(object model)
- {
- return GetMapper().Update(model);
- }
- /// <summary>
- /// 删除对象
- /// </summary>
- /// <param name="model"></param>
- /// <returns></returns>
- public int Delete(object model)
- {
- return GetMapper().Delete(model);
- }
- #region IDisposable 成员
- /// <summary>
- /// 是否数据库访问组件资源
- /// </summary>
- public void Dispose()
- {
- }
- #endregion
- }
当然这里只贴出实例代码。当然我采用这样的方式,就是利用我们之前的一篇:Step by Step-构建自己的ORM系列-开篇这篇中的反射的思想,大家可以看看
特性+反射的思路,我这里的数据持久化访问器也是类似的操作,可能底层的实现就是这样的方式。
具体的数据持久化访问器如何动态的生成SQL语句,缓存优化等各方面的内容,我们本篇可能不会深入的讲解,我还是想将这块放在ORM系类篇深入讲解。
当然我们其实可能极端的做饭就是为每个领域模型中的对象建立一个数据持久化映射器,完成映射,我这里则是通过创建数据库的统一模式,在具体的映射器中,
通过反射取得数据对象的映射信息。我们来看看实现的思路吧,具体代码我就不贴了
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/8F122121216.png" />
大体的流程就是上面说的了,细节肯定还有很多要注意的地方。
下面我们来看看查询服务的实现:
我想一般的系统80%的时间数据库执行的操作是查询,而20%的时间在完成写入和修改的操作,当然我这里不是绝对的说法。我们希望有一个工具帮我们自动完
成基本的查询服务,而不是我们手动的去书写,因为我们发现对大部分的数据集合而言,有一些共性的操作,例如获取某个主键值的对象的信息,或者是获取数据库表
中的总行数,或者是返回数据库表的所有记录,并且如何将关系数据库中的关系模型转换为对象模型,这都是查询服务中应该提供的基本功能。下面我们来看看简单实
现吧。
我想我们还是参考前面的方式,我们将IDALInterface层中的查询服务进行抽象分离,将查询服务单独提出来放在接口IQuery中。代码如下:
- public interface IQuery
- {
- /// <summary>
- /// 查询所有记录
- /// </summary>
- /// <typeparam name="T">泛型模型</typeparam>
- /// <returns></returns>
- IList<T> GetAll<T>() where T : class,new();
- /// <summary>
- /// 查询满足条件的集合
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="whereCondition"></param>
- /// <returns></returns>
- IList<T> GetListByQuery<T>(WhereCondition whereCondition) where T : class,new();
- /// <summary>
- /// 返回总行数
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- int GetCount<T>();
- /// <summary>
- /// 返回满足条件的总行数
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="whereCondition"></param>
- /// <returns></returns>
- int GetCount<T>(WhereCondition whereCondition);
- /// <summary>
- /// 根据主键返回对象模型
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="key"></param>
- /// <returns></returns>
- T GetModelByKey<T>(object key) where T : class,new();
- }
我