DataRabbit 輕量的數據訪問框架(06) -- IRelationAccesser

   (完全限定類名:DataRabbit.Relation.IRelationAccesser) 
   
   前面介紹的IOrmAccesser是對單表進行ORM訪問,而ITableAccesser是對單表進行基於關係的訪問,如果我們要進行聯合查詢這樣的跨表搜索,則使用它們就無法達成目標。這時,你可以使用IRelationAccesser。與IOrmAccesser和ITableAccesser的針對性不同(它們針對數據庫中的某個表),IRelationAccesser針對的是整個目標數據庫。在DataRabbit中,所有的跨表操作推薦使用IRelationAccesser來完成(除非以後有更好的解決方案)。

   IRelationAccesser將數據訪問分成兩類:Query和Command。Query返回DataSet,Command沒有返回值。另外,IRelationAccesser還支持執行帶有參數的查詢語句。
   我們可以從DataRabbit的入口點IDataAccesser中獲取IRelationAccesser引用: 
   IRelationAccesser relationAccesser = dataAccesser.GetRelationAccesser(null);

   IRelationAccesser接口的完整定義如下,僅僅包含三個方法:
    public interface IRelationAccesser : ITransactionAccesser
    {
        
/// <summary>
        
/// DoCommand 執行數據命令
        
/// </summary>       
        void DoCommand(string command);

        
// <summary>
        /// DoQuery 執行查詢數據
        
/// </summary>  
        DataSet DoQuery(string query);

        
/// <summary>
        
/// ExcuteRegularQuery 執行帶有參數的查詢語句,參數值由paraValues給出。
        
/// </summary>       
        /// <param name="regularQuery">帶參數的查詢語句</param>
        /// <param name="paraPrefix">查詢語句中參數的前綴,該前綴可以用戶自定義</param>    
        /// <param name="paraValues">鍵爲參數名,不帶參數前綴</param>    
          
        DataSet ExcuteRegularQuery(string regularQuery, string paraPrefix, IDictionary<stringobject> paraValues);       
    }    
   假設,我們要進行一個聯合查詢,可以這樣做:
   string joinSelect = "SELECT ErrorDetail.*, TaskError.Location FROM ErrorDetail INNER JOIN TaskError ON ErrorDetail.ErrorID = TaskError.ID WHERE (TaskError.ID = '1')";
   DataSet ds 
= relationAccesser.DoQuery(joinSelect);
   如果想使用參數化的查詢,可以調用ExcuteRegularQuery方法,我們現在通過調用ExcuteRegularQuery方法來實現上面的功能:
   string joinSelect = "SELECT ErrorDetail.*, TaskError.Location FROM ErrorDetail INNER JOIN TaskError ON ErrorDetail.ErrorID = TaskError.ID WHERE (TaskError.ID = @ID)";         
   
//準備參數
   IDictionary<stringobject> dic = new Dictionary<stringobject>();
   dic.Add(
"ID"1);//參數名不用帶參數前綴
   
//查詢
   DataSet ds2 = relationAccesser.ExcuteRegularQuery(joinSelect, "@", dic);
   特別要注意的是,ExcuteRegularQuery方法中的paraPrefix參數用於表示查詢語句中所使用的參數前綴,這個前綴用戶可以自己指定,DataRabbit在執行前會自動將其轉換爲數據庫所要求的參數前綴。比如,如果後臺數據庫是Oracle,上述語句的參數前綴“@”會被自動轉換成Oracle所要求的前綴“:”。

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