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


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

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

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

三、框架性能對比 敬請期待

【前言】

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

  下面我們對Bantina 1.0 使用方式做詳細介紹。

  介紹之前,我們先在本地創建一個數據庫,作為演示使用實例以及數據庫查詢對比的操作對象,該數據庫結構如下圖所示:

  

  數據庫名:DB_QX_Frame_Test

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

          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     }

  1、添加數據方法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語句

  

  2、查詢單條實體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語句:

  

  3、查詢多條記錄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語句:

  

  4、分頁查詢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))

  5、修改操作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語句:

  

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

  

  當然,如果是自增字段,那么會自動跳過修改環節。

  6、刪除操作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條件進行修改,不需要先進行查詢操作。

  

  7、原生Sql查詢方式支持

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

  

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

  

  查詢結果:

  

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

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


 

  到這里,我們大部分的基礎功能操作已經演示完畢,已經可以滿足我們大部分的業務需求。

  關於我們Bantina ORM 實體框架的性能介紹我們會放在下一章進行和其他常用ORM框架作為對比展示。

【獲取方式】

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

  

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

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

  3、聯系本人獲取,聯系方式在下方博客簽名中,qq、email均可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM