Farseer.net輕量級ORM開源框架 V1.x 入門篇:新版本說明


導航

目   錄:Farseer.net輕量級ORM開源框架 目錄

上一篇:沒有了

下一篇:Farseer.net輕量級ORM開源框架 V1.x 入門篇:數據庫配置

前言

  V1.x版本終於到來了。本次版本的開發從3月份開始,花了一個月的時間完成了概念版本設計、開發。到了4月份進行多次的內核的重構設計。到了5月份進行大規模的BUG修復、代碼優化。

  截止到今天(6月初),已知的BUG都已修復,並已在2個項目中應用了,並且運行良好。

本篇主題

1、新增隊列管理:

  新版本改變了V0.x時的使用方式,以Entityframework為模型進行參考設計。

  在新版中,多了隊列的概念,也就是我們在對表進行操作時,並不是單句運行的,經常是一段邏輯里面會對不同的表進行多次的操作。

  最后在進行SaveChange()時,通過隊列管理(QueueManger)迭代所有隊列(Queue)進行委托執行提交到數據庫。

  這里面涉及到了延遲執行的概念。 但一旦遇到“查詢”的SQL操作時,會提前提交代碼到數據庫。

新版本提供的兩種方式

2、新增數據庫操作:

1 Table.Data.User.Insert(new UserVO() { UserName = "yy" });
1 using (var context = new Table())
2 {
3     var info = new UserVO() { UserName = "xx" };
4     context.User.Insert(info);
5     context.SaveChanges();
6 }

  在舊版本中只提供了第一種方式,而在新版本中,多了第二種方式。

  在第二種方式中,只有在context.SaveChanges();之后才會對數據庫的操作生效。這是從調用的角度來說的,當然新版本中,內核處理方式完全改變了。

  采用new Table()方式,則會延遲到SaveChange()時才轉換成Sql,生成Sql參數化,然后提交到數據庫(默認事務方式,允許手動關閉),這里類似EntityFramework的方式。

新版實體類的映射

3、改變的實體類(不再需要繼承基類了):

 1     /// <summary>
 2     ///     數據庫上下文
 3     /// </summary>
 4     public class Table : DbContext<Table>
 5     {
 6         /// <summary>
 7         ///     加載表時觸發
 8         /// </summary>
 9         protected override void CreateModelInit(Dictionary<string, SetDataMap> map)
10         {
11             // 設置一張表的名稱、主鍵、外鍵
12             map["User"].SetName("Members_User");
13             map["UserRole"].SetName("Members_Role");
14             map["Orders"].SetName("Members_Orders");
15         }
16 
17         /// <summary>
18         ///     默認為0時,可不顯示填寫這一項,當前只是為了演示
19         /// </summary>
20         public Table() : base(0)
21         {
22         }
23 
24         /// <summary> 普通表 </summary>
25         public TableSet<UserVO> User { get; set; }
26 
27         /// <summary> 緩存表 </summary>
28         public TableSetCache<UserRoleVO> UserRole { get; set; }
29 
30         /// <summary> 普通表(GUID主鍵) </summary>
31         public TableSet<OrdersVO> Orders { get; set; }
32 
33     }

  看了上面的實體類映射,是不是覺得很像EntityFramework的DbContext、DbSet呢。

  UserVO 繼承 IEntity<int?> 並不是必須的。繼承它后,框架會提供一些額外的擴展支持。(后面文章在詳細述說)

  在新版本中,主鍵int ID不是強制性的繼承了

  PO、VO的分離。在舊版本中,如果有多張表的字段結構完全一樣,則在映射時必須要為每張表定義一樣的實體類。這對項目而言是臃腫的代碼。

  在新版本中,VO脫離了框架的束縛,由Table來決定我這張表由“誰”來映射它的結構,這會給我們的實現項目中帶來非常靈活的編碼方式,比如多個數據庫表對應同一個VO實體。

實體類的Map方式分離了

4、Map分離了:

  在舊版本中,因為實體類只有一個,沒有分離。所以對整個class進行了映射並緩存。

  而在新版本中,Map區分了:結構性的Map與非結構性的Map。

  這樣區分的目地是因為結構性的Map是運行時固定不變的,可以進行緩存。而非結構性的Map,包含了用戶定義(動態改變)的數據。所以不進行緩存處理。

  它們在命名空間:FS.Sql.Map中

  在這里,大家有所了解就行。實際項目中用到不大,更多的是FS.Core中內部的調用。它標記了各個實體類的映射關系。

統一的緩存管理

5、統一了緩存的管理:

  在原來的版本中,有些緩存的(比如反射的、枚舉中文名稱的、ORM的)是存在各自的管理中。

  而在新版本中,將統一放到FS.Cacher中。並提供了Clear()方法進行清除所有緩存。

新版本結構的分離

6、結構的分離:

  以上講的是調用方式的改變以及實體類映射的改變。為了更方便於開源推廣,框架在結構上也進行了分離:

  • Farseer.Net:基礎類庫。
  • Farseer.Net.Sql:本篇教程的類庫:Orm
  • Farseer.Net.Utils:提供常用的工具類(但不與WinForm、WebForm、MVC有任何的關聯)
  • Farseer.Net.Utils.Form:提供WinForm的相關工具
  • Farseer.Net.Utils.Web:提供WebForm、MVC的相關工具

  

  在實際項目中,大家可能不會用到除ORM以外的工具類(大家有自已常用的工具類)。因此分離出來,讓ORM更加專注。

  因此本系列教程,只講解Farseer.Net相關代碼,其它工具類請大家自行下截后研究。(其實也沒什么可研究性,就只是一些工具類方法)

  兩個版本的區別是巨大的,作者在新版本中是進行了完全的重寫,所以本篇中不能一一描述新舊版本的區別。本篇中僅是給大家帶來一個初步的印象,后面的篇幅,我們會一一講解每個運用。

調用的例子

7、全新的編碼方式:

  最后,我們在貼一段綜合調用的例子給大家:

 1 using (var context = new Table())
 2 {
 3     var info = context.User.Where(o => o.ID > 0 && o.CreateAt < DateTime.Now).Desc(o => new { o.ID, o.LoginCount }).Asc(o => o.GenderType).ToEntity();
 4     info.PassWord = "77777";
 5     context.User.Where(o => o.ID == 1).Update(info);
 6 
 7     info.ID = null;
 8     info.PassWord = "00000New";
 9     context.User.Insert(info);
10 
11 
12     context.User.Where(o => o.ID == 1).Append(o => o.LoginCount, 1).AddUp();
13     context.User.AddUp(o => o.LoginCount, 1);
14     context.UserRole.ToList();
15     context.UserRole.Where(o => o.ID == 1).ToList();
16     context.UserRole.Where(o => o.ID > 1).ToList();
17     var lst = context.User.Where(o => o.ID > 0).Desc(o => new { o.ID, o.LoginCount }).Asc(o => o.GenderType).ToList();
18 
19     context.SaveChanges();
20 }
1 new Table().User.Where(o => o.ID > 0).ToList();
2 Table.Data.User.AddUp(o => o.LoginCount, 1);
3 Table.Data.User.Where(o => o.ID > 0).ToList();
4 Table.Data.Set<UserVO>().Where(o => o.ID > 0).ToList();

  本篇不會講太多實質性的代碼,主要是講解下新舊版本的對比,讓大家有個直觀的印象。

  本篇就講解到這,后面的篇幅將開始真正帶領大家認識新框架的魅力了。

導航

目   錄:Farseer.net輕量級ORM開源框架 目錄

上一篇:沒有了

下一篇:Farseer.net輕量級ORM開源框架 V1.x 入門篇:數據庫配置

廣告時間

QQ群:116228666 (Farseer.net開源框架交流) 請注明:Farseer.Net

Farseer.Net是一款ORM框架 + 常用工具 + 擴展集合。

Farseer 寓意:先知、預言家 通常在某些場合時,提供計謀、策略。也希望該框架能給大家提供最大化的便捷。

ORM:其英文全稱是:Object(對象) Relational(關系) Mapping(映射)

Farseer.Net的目標是:快速上手、快速開發、簡單方便。

1 Table.Data.User.Where(o=>o.ID == 1).ToEntity();
2 Table.Data.User.Where(o=>o.ID > 1).ToList();
3 Table.Data.User.Where(o=>o.ID != 0).Delete();
4 Table.Data.User.Where(o=>o.ID != 0).AddUp(o=>o.LoginCount, 1);
5 Table.Data.User.Where(o=>o.ID == 1).Update(new User{ UserName = "newName" });
6 Table.Data.User.Insert(new User{ UserName = "newName" });

 


免責聲明!

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



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