使用ORM有一個優勢,可以通過某種機制將資料庫中的資料轉化為自己想要的物件形式資料。本章記錄一下如何使用Git.Framework返回實體物件
一. Git.Framework 中提供的方法
在Git.Framework中有七個方法可以返回實體物件,先簡答的看看這裡的方法描述
(1) T GetSingle(int id); (2) T GetSingle(object value); (3) T GetSingle(T entity); (4) V GetSingle<V>(T entity) where V : class, new(); (5) T GetSingle(int id, bool isOpenTrans); (6) T GetSingle(T entity, bool isOpenTrans); (7) V GetSingle<V>(T entity, bool isOpenTrans) where V : class, new();
上面總共提供了七個方法用來查詢一個實體物件,當然資料庫中沒有響應的記錄則返回為null。
T GetSingle(int id);
T 是使用的泛型,前面也介紹到了T使用泛型約束必須繼承自BaseEntity。 實體中必須有和返回資料列相對應的列才可以獲取其值. 如果資料庫中表示使用自動標識列作為主鍵可以使用此方法來查詢一個實體物件。
T GetSingle(object value);
這個方法和上面的一樣,感覺有點雞肋,暫且不用過多的去考慮,這個方法就是根據主鍵來查詢實體物件,不支援聯合主鍵.
T GetSingle(T entity);
這個方法比較智慧一點,可以自定義返回列的數量以及查詢的條件,應該屬於適用最多的這種情況
V GetSingle<V>(T entity) where V : class, new();
這個方法和上面一個其實是一樣的,在前面提到過了T適用了泛型約束,而V在這裡也是用了泛型約束是一個類,並且必須提供建構函式. T 實際上對應資料庫中的一個表,而V不一定對應資料庫中的表,其物件屬性可以自定義的,只要資料庫查詢返回的列中存在於這個物件屬性中,那麼就可以將值付給它。
至於後面一個方法完全是雞肋,這裡不用多說了。
二. 查詢方法案例
函式1: T GetSingle(int id);
AdminEntity entity = this.Admin.GetSingle(1);
上面的這段程式碼返回返回Admin表中主鍵為1 的這一行資料的所有值.
函式2: T GetSingle(T entity)
AdminEntity entity = new AdminEntity(); entity.Include(a => new { a.ID, a.UserCode, a.UserName, a.PassWord, a.Email, a.Phone, a.Mobile, a.RealName, a.RoleNum, a.DepartNum }); entity.Where(a => a.UserCode == userCode); entity = this.Admin.GetSingle(entity); return entity;
上面的程式碼看過前面幾張的應該也見怪不怪了, 返回資料庫表中的指定列,並且滿足一定的要求,也就是篩選條件. 但是有時候篩選條件是返回多行資料的,這裡只會讀取第一行,其餘行的資料不會做處理。
函式3: V GetSingle<V>(T entity) where V : class, new();
AdminEntity entity = new AdminEntity(); entity.Include(a => new { a.ID, a.UserCode, a.UserName, a.PassWord, a.Email, a.Phone, a.Mobile, a.RealName, a.RoleNum, a.DepartNum }); entity.Where(a => a.UserCode == userCode); //entity = this.Admin.GetSingle(entity); Git.Storage.Entity.Store.CustomerEntity cus = this.Admin.GetList<Git.Storage.Entity.Store.CustomerEntity>(entity); return entity;
在物件CustomerEntity中有表Admin相同欄位的對映,我們查詢的時候就不一定要使用返回AdminEntity,可以使用其他的物件來接收返回值資料。
三. 返回資料行數
在資料庫中行使用到count() 行數,用於篩選資料有多少行,在Git.Framework中提供了幾個函式專門來處理資料行的問題。
int GetCount(); int GetCount(bool isOpenTrans); int GetCount(T entity); int GetCount(T entity, bool isOpenTrans);
int GetCount(); 用於該表中的所有資料行數.
int GetCount(T entity); 這個函式用於返回特定的篩選條件的資料行數
另外的兩個函式是雞肋,你可以不用理他們,留之無礙,舍之可惜。
AdminEntity entity = new AdminEntity(); int count = this.Admin.GetCount();
上面程式碼是返回表Admin中的所有資料行數,沒有資料返回0
AdminEntity entity = new AdminEntity(); int count = this.Admin.GetCount(entity);
上面的程式碼沒有使用任何條件,結果也是查詢該表的所有的資料行
AdminEntity entity = new AdminEntity(); entity.Where(a => a.UserCode == userCode); int count = this.Admin.GetCount(entity);
這段程式碼和上面的是一樣的,只是帶了相應的條件而已,返回篩選的資料行
四. 聚合函式
聚合函式在SQL中是不得不說的,在Git.Framework 中提供了幾個簡單的幾何函式方法對映
V Max<V>(T entity); V Max<V>(T entity, bool isOpenTrans); V Min<V>(T entity); V Min<V>(T entity, bool isOpenTrans); V Sum<V>(T entity); V Sum<V>(T entity, bool isOpenTrans);
聚合函式大家懂的,和上面的Count()使用的方法是一樣,這個裡面也提供了一些雞肋的方法,索然無味!這裡不貼使用例項了。