(完全限定類名:DataRabbit.Relation.ITableAccesser)
ORM并不能完成所有的事情,有些資料庫通路還是需要基于關系來進行,對于那些不提供基于關系進行資料通路操作的純ORM架構,我認為是不明智的。在DataRabbit中,基于ORM的通路和基于關系進行資料通路各占了一半的天空,這使得我們在無法用ORM達成的地方,可以轉向使用基于關系的通路器來達成。DataRabbit.Relation命名空間下的類和接口用于提供基于關系的資料庫通路操作,主要包括:針對資料庫的Relation通路器(IRelationAccesser)、針對Table的Relation通路器(ITableAccesser)和針對存儲過程的通路器(ISPAccesser),本文先介紹 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
/// CommitData 送出DataTable中的changes到資料庫
/// </summary>
void CommitData(DataTable dt);
#region Delete
/// Delete 删除目标表中所有滿足where條件的記錄
void Delete(string where);
#region Clear
/// Clear 清空目标表
void Clear();
#region Insert
/// Insert 将row存放到資料庫中
/// </summary>
void Insert(DataRow row);
#region Get
/// Get 擷取滿足條件的DataSet
/// </summary>
DataSet Get(string where);
/// GetOne 傳回滿足where條件的第一條記錄
DataRow GetOne(string where);
#endregion
#region no transaction
/// GetRecordsCount 擷取目标表中滿足where條件的記錄總數
/// </summary>
int GetRecordsCount(string where);
/// NewRow 傳回一個與目标表大綱完全一緻的DataRow
DataRow NewRow();
/// GetEmptyTable 擷取一個空的DataTable,該DataTable反映了目标表的結構
/// <returns></returns>
DataTable GetEmptyTable();
}