日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明

發(fā)布時(shí)間:2023/11/27 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
導(dǎo)航

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

上一篇:沒有了

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

前言

  V1.x版本終于到來了。本次版本的開發(fā)從3月份開始,花了一個(gè)月的時(shí)間完成了概念版本設(shè)計(jì)、開發(fā)。到了4月份進(jìn)行多次的內(nèi)核的重構(gòu)設(shè)計(jì)。到了5月份進(jìn)行大規(guī)模的BUG修復(fù)、代碼優(yōu)化。

  截止到今天(6月初),已知的BUG都已修復(fù),并已在2個(gè)項(xiàng)目中應(yīng)用了,并且運(yùn)行良好。

本篇主題

1、新增隊(duì)列管理:

  新版本改變了V0.x時(shí)的使用方式,以Entityframework為模型進(jìn)行參考設(shè)計(jì)。

  在新版中,多了隊(duì)列的概念,也就是我們在對表進(jìn)行操作時(shí),并不是單句運(yùn)行的,經(jīng)常是一段邏輯里面會對不同的表進(jìn)行多次的操作。

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

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

新版本提供的兩種方式

2、新增數(shù)據(jù)庫操作:

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();之后才會對數(shù)據(jù)庫的操作生效。這是從調(diào)用的角度來說的,當(dāng)然新版本中,內(nèi)核處理方式完全改變了。

  采用new Table()方式,則會延遲到SaveChange()時(shí)才轉(zhuǎn)換成Sql,生成Sql參數(shù)化,然后提交到數(shù)據(jù)庫(默認(rèn)事務(wù)方式,允許手動(dòng)關(guān)閉),這里類似EntityFramework的方式。

新版實(shí)體類的映射

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

 1     /// <summary>
 2     ///     數(shù)據(jù)庫上下文
 3     /// </summary>
 4     public class Table : DbContext<Table>
 5     {
 6         /// <summary>
 7         ///     加載表時(shí)觸發(fā)
 8         /// </summary>
 9         protected override void CreateModelInit(Dictionary<string, SetDataMap> map)
10         {
11             // 設(shè)置一張表的名稱、主鍵、外鍵
12             map["User"].SetName("Members_User");
13             map["UserRole"].SetName("Members_Role");
14             map["Orders"].SetName("Members_Orders");
15         }
16 
17         /// <summary>
18         ///     默認(rèn)為0時(shí),可不顯示填寫這一項(xiàng),當(dāng)前只是為了演示
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     }

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

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

  在新版本中,主鍵int ID不是強(qiáng)制性的繼承了

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

  在新版本中,VO脫離了框架的束縛,由Table來決定我這張表由“誰”來映射它的結(jié)構(gòu),這會給我們的實(shí)現(xiàn)項(xiàng)目中帶來非常靈活的編碼方式,比如多個(gè)數(shù)據(jù)庫表對應(yīng)同一個(gè)VO實(shí)體。

實(shí)體類的Map方式分離了

4、Map分離了:

  在舊版本中,因?yàn)閷?shí)體類只有一個(gè),沒有分離。所以對整個(gè)class進(jìn)行了映射并緩存。

  而在新版本中,Map區(qū)分了:結(jié)構(gòu)性的Map與非結(jié)構(gòu)性的Map。

  這樣區(qū)分的目地是因?yàn)榻Y(jié)構(gòu)性的Map是運(yùn)行時(shí)固定不變的,可以進(jìn)行緩存。而非結(jié)構(gòu)性的Map,包含了用戶定義(動(dòng)態(tài)改變)的數(shù)據(jù)。所以不進(jìn)行緩存處理。

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

  在這里,大家有所了解就行。實(shí)際項(xiàng)目中用到不大,更多的是FS.Core中內(nèi)部的調(diào)用。它標(biāo)記了各個(gè)實(shí)體類的映射關(guān)系。

統(tǒng)一的緩存管理

5、統(tǒng)一了緩存的管理:

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

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

新版本結(jié)構(gòu)的分離

6、結(jié)構(gòu)的分離:

  以上講的是調(diào)用方式的改變以及實(shí)體類映射的改變。為了更方便于開源推廣,框架在結(jié)構(gòu)上也進(jìn)行了分離:

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

  

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

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

  兩個(gè)版本的區(qū)別是巨大的,作者在新版本中是進(jìn)行了完全的重寫,所以本篇中不能一一描述新舊版本的區(qū)別。本篇中僅是給大家?guī)硪粋€(gè)初步的印象,后面的篇幅,我們會一一講解每個(gè)運(yùn)用。

調(diào)用的例子

7、全新的編碼方式:

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

 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();

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

  本篇就講解到這,后面的篇幅將開始真正帶領(lǐng)大家認(rèn)識新框架的魅力了。

導(dǎo)航

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

上一篇:沒有了

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

廣告時(shí)間

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

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

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

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

Farseer.Net的目標(biāo)是:快速上手、快速開發(fā)、簡單方便。

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" });

?

轉(zhuǎn)載于:https://www.cnblogs.com/steden/p/4555257.html

總結(jié)

以上是生活随笔為你收集整理的Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。