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


       
    }


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章