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

導航

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

上一篇:沒有了數據庫

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

前言

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

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

本篇主題

一、新增隊列管理:ide

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

  在新版中,多了隊列的概念,也就是咱們在對錶進行操做時,並非單句運行的,常常是一段邏輯裏面會對不一樣的表進行屢次的操做。優化

  最後在進行SaveChange()時,經過隊列管理(QueueManger)迭代全部隊列(Queue)進行委託執行提交到數據庫。編碼

  這裏面涉及到了延遲執行的概念。 但一旦遇到「查詢」的SQL操做時,會提早提交代碼到數據庫。spa

新版本提供的兩種方式

二、新增數據庫操做:

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的方式。

新版實體類的映射

三、改變的實體類(再也不須要繼承基類了):

 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方式分離了

四、Map分離了:

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

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

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

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

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

統一的緩存管理

五、統一了緩存的管理:

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

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

新版本結構的分離

六、結構的分離:

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

  • 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相關代碼,其它工具類請你們自行下截後研究。(其實也沒什麼可研究性,就只是一些工具類方法)

  兩個版本的區別是巨大的,做者在新版本中是進行了徹底的重寫,因此本篇中不能一一描述新舊版本的區別。本篇中僅是給你們帶來一個初步的印象,後面的篇幅,咱們會一一講解每一個運用。

調用的例子

七、全新的編碼方式:

  最後,咱們在貼一段綜合調用的例子給你們:

 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" });
相關文章
相關標籤/搜索