• DataRabbit 轻量的数据访问框架(05) -- ITableAccesser


       (完全限定类名:DataRabbit.Relation.ITableAccesser) 
       
       ORM并不能完成所有的事情,有些数据库访问还是需要基于关系来进行,对于那些不提供基于关系进行数据访问操作的纯ORM框架,我认为是不明智的。在DataRabbit中,基于ORM的访问和基于关系进行数据访问各占了一半的天空,这使得我们在无法用ORM达成的地方,可以转向使用基于关系的访问器来达成。DataRabbit.Relation命名空间下的类和接口用于提供基于关系的数据库访问操作,主要包括:针对数据库的Relation访问器(IRelationAccesser)、针对Table的Relation访问器(ITableAccesser)和针对存储过程的访问器(ISPAccesser),本文先介绍 ITableAccesser。
       
       同所有DataRabbit中的其它访问器一样,ITableAccesser也继承自ITransactionAccesser,它用于针对一个特定的表进行基于关系的数据访问。我们可以从DataRabbit的入口点IDataAccesser中获取ITableAccesser引用,比如,我们要得到针对Student表的ITableAccesser,可以这样做:
       ITableAccesser stuTableAccesser = dataAccesser.GetTableAccesser("Student"null);

       同ORM访问器一样,所有基于关系的访问器都向使用者屏蔽了地层的IDbCommand、IDbConnection等对象,使用者不必再关心打开连接、执行命令、关闭连接等繁琐的操作,只需要将sql语句交给访问器执行就可以了。比如,我们要删除所有年龄大于30的student,使用ITableAccesser可以这么做:
       ITableAccesser stuTableAccesser = dataAccesser.GetTableAccesser("Student"null);
       stuTableAccesser.Delete(
    string.Format("where {0} > '30'" ,Student._Age));
       使用基于关系的访问器需要自己手写SQL语句,特别是用于搜索的Where子句,由于能支持手写SQL语句,所以相对于ORM访问器,基于关系的访问器可以执行更复杂的数据库操作。注意,在介绍ORM访问器时,我们经常使用Filter来表示条件,但是Filter以及IFilterTree仅仅只能在ORM访问器中使用,在基于关系的访问器中是不能使用它们的。
       IDataAccesser接口相对简单,我们来看看它的全貌,之后你就知道该接口中各方法的含义了:
        public interface ITableAccesser :ITransactionAccesser
        {
            
    #region TableName
            
    /// <summary>
            
    /// TableName 目标表名称
            
    /// </summary>
            string TableName { get; } 
            
    #endregion

            
    #region CommitData
            
    /// <summary>
            
    /// CommitData 提交DataTable中的changes到数据库
            
    /// </summary>        
            void CommitData(DataTable dt);
            
    #endregion

            
    #region Delete
            
    /// <summary>
            
    /// Delete 删除目标表中所有满足where条件的记录
            
    /// </summary>        
            void Delete(string where);        
            
    #endregion

            
    #region Clear
            
    /// <summary>
            
    /// Clear 清空目标表
            
    /// </summary>
            void Clear();
            
    #endregion

            
    #region Insert
            
    /// <summary>
            
    /// Insert 将row存放到数据库中
            
    /// </summary>       
            void Insert(DataRow row);       
            
    #endregion

            
    #region Get
            
    /// <summary>
            
    /// Get 获取满足条件的DataSet
            
    /// </summary>      
            DataSet Get(string where);

            
    /// <summary>
            
    /// GetOne 返回满足where条件的第一条记录
            
    /// </summary>       
            DataRow GetOne(string where);
            
    #endregion              
            
            
    #region no transaction
            
    /// <summary>
            
    /// GetRecordsCount 获取目标表中满足where条件的记录总数
            
    /// </summary> 
            int GetRecordsCount(string where);

            
    /// <summary>
            
    /// NewRow 返回一个与目标表大纲完全一致的DataRow
            
    /// </summary>        
            DataRow NewRow();

            
    /// <summary>
            
    /// GetEmptyTable 获取一个空的DataTable,该DataTable反映了目标表的结构
            
    /// </summary>
            
    /// <returns></returns>
            DataTable GetEmptyTable();
            
            
    #endregion

           
        }


    转到:DataRabbit 轻量的数据访问框架 -- 序
  • 相关阅读:
    在DataList控件中删除数据记录
    java中进行二进制,八进制,十六进制,十进制间进行相互转换
    Java中重载重写
    WCF 第七章 寄宿 在Windows 进程激活服务中寄宿服务
    .NET 中的十进制浮点类型(译文)
    .NET 中的二进制浮点类型(译文)
    WCF 第六章 序列化和编码 总结
    WCF 第六章 序列化和编码 为自定义序列化使用XmlSerializer
    WCF 第七章 寄宿 在IIS7中寄宿服务
    WCF 第七章 寄宿
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/682322.html
Copyright © 2020-2023  润新知