輕量級ORM框架 QX_Frame.Bantina(2、框架使用方式介紹)

輕量級ORM框架QX_Frame.Bantina系列講解(開源

1、框架簡介 http://www.cnblogs.com/qixiaoyizhan/p/7417467.html
html

2、框架使用方式介紹 http://www.cnblogs.com/qixiaoyizhan/p/7418058.html git

3、框架性能對比 敬請期待github

【前言】

  上一節咱們對Bantina ORM框架進行了簡單的說明介紹,在這一節中,咱們將對Bantina框架的使用方式進行說明。sql

  下面咱們對Bantina 1.0 使用方式作詳細介紹。數據庫

  介紹以前,咱們先在本地建立一個數據庫,做爲演示使用實例以及數據庫查詢對比的操做對象,該數據庫結構以下圖所示:框架

  

  數據庫名:DB_QX_Frame_Test異步

  其中包含三張表:TB_ClassName  (班級名稱)ide

          TB_People    (人員表)性能

          TB_Score     (分數表)測試

          表之間的關係是TB_People中有TB_ClassName的外鍵

【框架使用方式簡介】

  咱們經過Bantina1.0 ORM框架對測試表數據的增刪改查來實現對框架的使用介紹。

  首先須要引用對應的dll類庫 QX_Frame.Helper,類庫多種獲取方式在每篇介紹的最下面獲取方式中有說明介紹。

  Nuget方式獲取:打開Nuget包搜索器,搜索 QX_Frame.Helper,而後選擇版本2.0.0 安裝便可(1.0.0不包含Bantina框架)

  

  項目中引用命名空間 

  using QX_Frame.Helper_DG.Bantina;

  將上述錶轉化成對應的實體,這裏能夠手動寫,也能夠聯繫本人獲取代碼生成器進行生成。(主外鍵關係要配置好,查詢時候須要)

 1 public class DB_QX_Frame_Test : Bantina
 2     {
 3         public DB_QX_Frame_Test() : base("data source=.;initial catalog=DB_QX_Frame_Test;persist security info=True;user id=Sa;password=Sa123456;MultipleActiveResultSets=True;App=EntityFramework") { }
 4     }
 5 
 6     [Table(TableName = "TB_People")]
 7     public class TB_People
 8     {
 9         [Key]
10         public Guid Uid { get; set; }
11         [Column]
12         public string Name { get; set; }
13         [Column]
14         public int Age { get; set; }
15         [Column]
16         [ForeignKey]
17         public int ClassId { get; set; }
18         [ForeignTable]
19         public TB_ClassName TB_ClassName { get; set; }
20     }
21 
22     [Table(TableName = "TB_ClassName")]
23     public class TB_ClassName
24     {
25         // PK(identity)  
26         [Key]
27         public Int32 ClassId { get; set; }
28         //
29         [Column]
30         public String ClassName { get; set; }
31     }

  一、添加數據方法Add

  實例化一個TB_People對象,而後對對象的屬性進行賦值。

  實例化數據庫實體上下文,而後調用異步方法Add(),將實體添加進去。

  判斷異步返回結果,若是添加成功,返回Success!

 1 TB_People people = new TB_People ();
 2 people.Uid = Guid.NewGuid();
 3 people.Name = "555";
 4 people.Age = 22;
 5 people.ClassId = 3;
 6 
 7 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
 8 {
 9     if (test.Add(people).Result)
10     {
11         Console.WriteLine("insert success !");
12     }
13 }

  

  啓動調試執行該方法

  原數據庫記錄:

  

  

  執行後數據庫記錄:

  

  很簡單的操做,咱們將該條目插入了數據庫。

  咱們能夠在數據庫上下文的對象的屬性中看到執行的sql語句

  

  二、查詢單條實體QueryEntity

  爲何咱們不先講Update和Delete,由於咱們的Update和Delete操做是先查詢肯定要操做的對象後再執行對應的修改刪除方法,所以咱們先講查詢操做。

  查詢單條咱們能夠直接調用對應的查詢單條實體方法,並用Lambda方式傳入查詢條件進行查詢:

1 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
2 {
3     TB_People people = test.QueryEntity<TB_People>(t => t.Name.Contains("55"));
4     Console.WriteLine($"uid = {people.Uid} , Name = {people.Name} , ClassName = {people.TB_ClassName.ClassName}");
5 }

  

  查詢一條Name包含55的數據,若是有多條,會自動匹配第一條。

  執行上述代碼:

  數據庫原紀錄:

  

  

  執行結果:

  

  經過主外鍵關聯的記錄也能夠被查詢到。

  咱們能夠在數據庫上下文的對象的屬性中看到執行的sql語句:

  

  三、查詢多條記錄List->QueryEntities

  查詢多條咱們能夠直接調用查詢多條的方法QueryEntites方法。該方法有多個重載,根據不一樣的業務需求進行不一樣的選擇。

1 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
2 {
3     List<TB_People> peopleList = test.QueryEntities<TB_People>();
4     foreach (var item in peopleList)
5     {
6         Console.WriteLine($"uid = {item.Uid} , Name = {item.Name} , ClassName = {item.TB_ClassName.ClassName}");
7     }
8 }

  

  咱們執行上述的查詢方法:

  數據庫原紀錄:

  

  執行後的結果:

  

  經過主外鍵關聯的記錄也能夠被查詢到。

  咱們能夠在數據庫上下文的對象的屬性中看到執行的sql語句:

  

  四、分頁查詢List->QueryEntitiesPaging

  分頁查詢和查詢所有記錄很類似,只要傳入分頁查詢的參數便可。

1 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
2 {
3     List<TB_People> peopleList = test.QueryEntitiesPaging<TB_People, string>(1, 2, t => t.Name, t => t.Age == 3, out int count, true);
4     foreach (var item in peopleList)
5     {
6         Console.WriteLine($"uid = {item.Uid} , Name = {item.Name} , ClassName = {item.TB_ClassName.ClassName}");
7     }
8 }

  

  咱們執行上述的查詢方法:

  數據庫原紀錄:

  

  查詢後的結果以下:

  

  當前方法傳遞的參數說明:

QueryEntitiesPaging<TEntity, TKey>(int pageIndex, int pageSize, Expression<Func<TEntity, TKey>> orderBy, Expression<Func<TEntity, bool>> where, out int count, bool isDESC = false)

  咱們傳遞了一個pageIndex、pageSize、orderBy、where查詢條件,以及數據庫總數的一個out參數;

  經過主外鍵關聯的記錄也能夠被查詢到。

  咱們能夠在數據庫上下文的對象的屬性中看到執行的sql語句:

  SELECT TOP 2 * FROM (SELECT ROW_NUMBER() OVER (ORDER BY  t.Name DESC ) AS RowNumber,* FROM TB_People t  where  (t.Age = 3)) AS TTTAAABBBLLLEEE  WHERE RowNumber > (2 * (1 - 1))

  五、修改操做Update

  修改操做咱們能夠先查詢待操做的對象,而後對對象進行修改操做。也能夠直接使用lambda表達式傳遞修改條件進行修改。

 1 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
 2 {
 3     TB_People people = test.QueryEntity<TB_People>(t => t.Name.Contains("55"));
 4     Console.WriteLine($"uid = {people.Uid} , Name = {people.Name} , ClassName = {people.TB_ClassName.ClassName}");
 5 
 6     people.Age = 55;
 7     if (test.Update(people).Result)
 8     {
 9         Console.WriteLine("update success !");
10     }
11 }

  

  咱們將Name包含55的第一條記錄的年齡改爲55.

  咱們執行上述的查詢方法:

  數據庫原紀錄:

  

  執行結果:

  

  而後查看執行後的數據庫記錄:

  

  能夠看到,數據已經被成功修改。

  經過數據庫上下文對象咱們來查看執行的sql語句:

  

  上述方法是默認根據主鍵進行修改,也就是說不支持主鍵的修改,若是想要獲得主鍵修改的支持,請調用重載方法進行修改:

  

  固然,若是是自增字段,那麼會自動跳過修改環節。

  六、刪除操做Delete

  刪除操做咱們能夠先查詢待操做的對象,而後對對象進行刪除操做,也能夠直接使用lambda表達式傳遞刪除條件進行刪除。

 1 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
 2 {
 3     TB_People people = test.QueryEntity<TB_People>(t => t.Name.Contains("55"));
 4 
 5     people.Age = 55;
 6 
 7     if (test.Delete(people).Result)
 8     {
 9        Console.WriteLine("delete success !");
10     }
11 }

  

  咱們將Name包含55的第一條記錄進行刪除操做.

  咱們執行上述的查詢方法:

  數據庫原紀錄:

  

  執行結果:

  

  而後查看執行後的數據庫記錄:

  

  能夠看到,數據已經被成功刪除。

  經過數據庫上下文對象咱們來查看執行的sql語句:

  

  上述方法是默認根據主鍵進行修改,若是咱們想要快捷地進行對應條件的刪除,那麼咱們能夠直接使用lambda表達式傳遞where條件進行修改,不須要先進行查詢操做。

  

  七、原生Sql查詢方式支持

  Bantina框架支持原生Sql語句的執行方式,有操做和查詢兩種方式,還保留了存儲過程執行接口。(使用泛型便於直接將結果轉化成對應的集合)

  

  咱們在這裏簡單執行一條查詢集合的sql語句:

  

  查詢結果:

  

   在這裏須要說明的是,這裏不會直接對關聯外鍵表進行查詢,咱們這裏查詢傳入的泛型T和表查詢的結果必須是一一對應的,所以,咱們能夠實現配置DTO數據傳輸對象去匹配查詢的結果集。

  並非不能實現關聯查詢,是爲了保持sql查詢的靈活性的特色沒有加相應功能。


 

  到這裏,咱們大部分的基礎功能操做已經演示完畢,已經能夠知足咱們大部分的業務需求。

  關於咱們Bantina ORM 實體框架的性能介紹咱們會放在下一章進行和其餘經常使用ORM框架做爲對比展現。

【獲取方式】

  一、Nuget獲取:Nuget搜索 QX_Frame.Helper_DG 

  

  二、GitHub查看源代碼:https://github.com/dong666/QX_Frame.Helper_DG

  注:bantina已正式更名爲Bankinate,新版本GitHub:https://github.com/dong666/QX_Frame.Bantina

  三、聯繫本人獲取,聯繫方式在下方博客簽名中,qq、email都可。

相關文章
相關標籤/搜索