亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

微型ORM的第一篇DapperLambda發布

2019-11-14 13:37:26
字體:
來源:轉載
供稿:網友

引言:因為接觸過多個ORM,但使用的時候都遇到了各自的一些不夠理想的地方,從最早開始開始公司自己分裝的,到后面用EF,以及Dapper和DapperExtensions  到現在用的FluentData,就說說我自己的使用體驗,在這幾個相比之下,Dapper應該是最輕量級,而且性能也是最好的,但是相對比較簡單了點。EF的最新版也沒去使用,所以現在不是很了解,EF在這幾個相比一下,功能是最強大的,但是啟動加載慢,以及復雜的功能,后續人優化麻煩。FluentData 怎么說呢,用的都挺好用,而且語法是最容易讓人理解,但是還是不支持Lambda。基于以上這些,所以萌生了我自己動手做一個ORM,性能能跟Dapper比肩,語法要簡單,容易理解,所以很多地方借鑒了FluentData ,但是內部的邏輯是完全不一樣的。

  總的來講的話, DapperLambda 就是Dapper和DapperExtensions的二次分裝,使用語法和FluentData基本類似,并加上了Lambda.原則:封裝和豐富這些功能不是為了不寫SQL,而是做到簡單的SQL,不希望在開發中重復寫。。。

 

下面我將介紹在開發過程中的運用.

一:下載該項目并且引用DapperLambda.dll,在VS的命令窗口中執行  Install-Package DapperLambda

 或是 在引用->管理NuGet程序包中搜索 DapperLambda

 

二.dll引用入到我們的數據業務層.

1.)創建并且初始化一個DbContext.

   它是我們與數據庫操作中的上下文,所有的有關數據操作都調用它下面的方法;目前只針對MSSQL進行了單元測試,后續會繼續完善在其他數據庫中使用,所以非MSSQL,使用請謹慎

1     public static DbContext GetContext()2         {3             string connectionStr = "server=(local);User ID=sa;PassWord=password01!;Database=LocalDB;Persist Security Info=True;Pooling=true;Max Pool Size=700";4             return new DbContext().ConnectionString(connectionStr, DatabaseType.MSSQLServer);5         }

2.)接下來就正式開始介紹DapperLambda的語法,因為部分語法都一致,所以在第一篇就不介紹了,后續都有詳細介紹,就挑幾個不一樣的了解一下

  1. 支持Lamba設置條件和排序 ,最終會得到一個SQL,(關于如果監控執行過程,后續會介紹) 執行返回得到IEnumerable<T>
1   [TestMethod]2         public void TestOrderByMethod()3         {4             using (var context = DBHelper.GetContext())5             {6                 var ls = context.Select<application>().Where(p => p.CategoryID == 1).OrderBy(p => p.ApplicationID).QueryMany();7                 Assert.IsTrue(ls.Count() > 0);8             }9         }

  直接上圖吧,最直接

  當然在這條件和排序都是可以進行多次組合如下:

1   [TestMethod]2         public void TestConditionMethod()3         {4             using (var context = DBHelper.GetContext())5             {6                 var ls = context.Select<Application>().Where(p => p.ApplicationID == 1000 || p.CategoryID == 1).And(c => c.Owner == "CNLIFAN").OrderBy(p => p.ApplicationID).QueryMany();7                 Assert.IsTrue(ls.Count() > 0);8             }9         }

2.Lambda指定條件、動態指定更新的字段,以防更新額外字段

1  public void UpdateMethod()2         {3             using (var context = DBHelper.GetContext())4             {5                 var item = context.Update<MobileForTest>().Set(new { MobileHolder = "TEST-10", MobilePhone = "18923456789" }).Where(p => p.ID == 1).Execute();6                 Assert.IsTrue(item > 0);7             }8         }

3.查詢語句嵌套,最終合并成一個大的SQL執行

1   public void Delete3Method()2         {3             using (var context = DBHelper.GetContext())4             {5                 var item = context.Delete<MobileForTest>().WhereIsIn(p => p.ID, context.Select<Application>(p => p.ApplicationID == 10001).Select(p => p.CategoryID)).Execute();6                 Assert.IsTrue(item > 0);7             }8         }

 

1    [TestMethod]2         public void SQLMethod13()3         {4             using (var context = DBHelper.GetContext())5             {6                 var item = context.Select<MobileForTest>().WhereNotIn(p => p.ID, context.Select<Application>(p => p.ApplicationID == 10001).Select(p => p.CategoryID)).QuerySingle();7                 Assert.IsTrue(item.ID == 1);8             }9         }

 

1   [TestMethod]2         public void SQLMethod14()3         {4             using (var context = DBHelper.GetContext())5             {6                 var curID = context.Select<MobileForTest>(p => p.ID == 1).Select(item => new { ID = item.ID, Mobile = item.MobilePhone }).QueryDynamicSingle();7                 var pkID = curID;8             }9         }

 

  靈活指定返回想要的字段

4.方便的使用事物

 1  [TestMethod] 2         public void UseTransactionMethod() 3         { 4             var pkid = 1; 5             var model = new MobileForTest { MobileHolder = "TEST-linfengFang", MobilePhone = "18911112222", Status = 0 }; 6             using (var context = DBHelper.GetContext().UseTransaction(true)) 7             { 8                 context.Insert<MobileForTest>(model).Execute(); 9                 var item = context.Sql("UPDATE MobileForTest SET MobileHolder = 'SQLMethod-linfeng' WHERE ID=@ID", new { ID = pkid }).Execute();10                 context.Commit();11             }12         }

 

5.在項目中更加使用的分頁功能

 1    [TestMethod] 2         public void SQLPage() 3         { 4             var record = 0; 5             using (var context = DBHelper.GetContext()) 6             { 7                 var pageIndex = 0; 8                 var pageSize = 3; 9                 context.Select<MobileForTest>(p => p.MobilePhone == "18911112222" && p.ID != 1).QueryPage(pageIndex, pageSize, out record);10                 Assert.IsTrue(record > 0);11             }12         }13         [TestMethod]14         public void SQLPage2()15         {16             var record = 0;17             using (var context = DBHelper.GetContext())18             {19                 var pageIndex = 0;20                 var pageSize = 3;21                 var ls = context.Sql("select * from MobileForTest").QueryPage<MobileForTest>(pageIndex, pageSize, out record);22                 Assert.IsTrue(record > 0);23             }24         }

 

     相對其他的ORM,做了以上的封裝,還有大部分基本的功能與其他的語法,也比較類似,所以開篇沒提到,目前都已經支持了。歡迎大家任意使用,如果有遇到問題,都可以給我留言,

代碼在后續會版本穩定和代碼規整后,會考慮進行開源。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩有码在线播放| 国内精品国产三级国产在线专| 亚洲人成网7777777国产| 麻豆乱码国产一区二区三区| 欧美床上激情在线观看| 色综合久综合久久综合久鬼88| zzjj国产精品一区二区| 欧美在线视频网| 欧美亚洲另类激情另类| 欧美激情视频给我| 日韩av中文字幕在线播放| 久热精品视频在线观看| 欧美精品videos性欧美| 成人黄色片在线| 中文字幕在线看视频国产欧美在线看完整| 在线观看日韩欧美| 久久亚洲私人国产精品va| 欧美中文字幕在线视频| 欧美国产视频一区二区| 欧美黄色免费网站| 亚洲成av人片在线观看香蕉| 欧美激情视频免费观看| 国产精品91一区| 性日韩欧美在线视频| 亚洲影视中文字幕| 中文字幕亚洲综合久久筱田步美| 亚洲日韩欧美视频| 国产精品日韩电影| 久久久www成人免费精品张筱雨| 久久国产精彩视频| 欧美精品做受xxx性少妇| 97精品伊人久久久大香线蕉| 5252色成人免费视频| 亚洲精品一区av在线播放| 国产91av在线| 伊是香蕉大人久久| 精品美女永久免费视频| 菠萝蜜影院一区二区免费| 色婷婷综合成人| 91九色国产在线| 欧美精品做受xxx性少妇| 久久久久一本一区二区青青蜜月| 欧美激情日韩图片| 自拍偷拍免费精品| 久久在线观看视频| 国产精品爽爽爽爽爽爽在线观看| 亚洲最大成人网色| 国产精品黄页免费高清在线观看| 国产成人涩涩涩视频在线观看| 欧美成年人网站| 97久久精品国产| 青草青草久热精品视频在线观看| 欧美性猛交xxxx免费看久久久| 不卡av在线网站| 国产精品丝袜久久久久久高清| 亚洲一区第一页| 国产日韩欧美在线观看| 国产精品美女主播在线观看纯欲| 成人激情av在线| 国产精品777| 日韩在线激情视频| 欧美黑人性生活视频| 久久久噜噜噜久久久| 亚洲精品动漫100p| 日韩视频免费在线观看| 亚洲精品国精品久久99热一| 日韩午夜在线视频| 色综合天天综合网国产成人网| 成人欧美一区二区三区在线湿哒哒| 欧美肥婆姓交大片| 欧美午夜丰满在线18影院| 91爱视频在线| 国产精品久久久久久av福利软件| 91国产中文字幕| 在线观看成人黄色| 亚洲欧洲一区二区三区在线观看| 欧美日韩激情美女| 亲子乱一区二区三区电影| 性视频1819p久久| 国产+人+亚洲| 欧美激情一区二区三区高清视频| 日韩大胆人体377p| 精品成人国产在线观看男人呻吟| 久久亚洲电影天堂| 91在线看www| 日韩在线视频网站| 4p变态网欧美系列| 国产精品一区二区电影| 久久精品国产91精品亚洲| 亚洲精品电影网在线观看| 97视频在线播放| 日韩欧美亚洲成人| 日本不卡免费高清视频| 国产亚洲精品美女| 国产精品久久久久久久电影| 91亚洲精品久久久久久久久久久久| 久久久久久久久久久久av| 久久影院资源网| 亚洲欧美激情在线视频| 欧美电影《睫毛膏》| 亚洲最大av在线| 中文字幕视频在线免费欧美日韩综合在线看| 91麻豆国产语对白在线观看| 亚洲影院色无极综合| 日本欧美一二三区| 亚洲a∨日韩av高清在线观看| 最近中文字幕mv在线一区二区三区四区| 成人免费视频网址| 91美女高潮出水| 亚洲精品国产精品久久清纯直播| 伊人久久五月天| 亚洲在线视频观看| 国产在线视频2019最新视频| 中文字幕成人在线| 欧美大肥婆大肥bbbbb| 日韩av在线精品| 日韩欧美在线字幕| 美日韩精品免费视频| 国产手机视频精品| 日韩av一区在线观看| 91最新国产视频| 国产suv精品一区二区| 国产一区二区成人| 91久久久亚洲精品| 亚洲精品一区二区三区婷婷月| 欧美第一黄色网| 国产精品一区二区三区久久久| 亚洲精品电影久久久| 日韩精品在线视频美女| 日韩人在线观看| 久久久爽爽爽美女图片| 亚洲午夜未删减在线观看| 日韩欧美一区二区三区| 色婷婷综合久久久久| 亚洲天堂精品在线| 日韩视频免费大全中文字幕| 欧美黄色免费网站| 久久99久久亚洲国产| 黄色91在线观看| 亚洲最大成人免费视频| 国产精品成人一区二区| 狠狠躁夜夜躁久久躁别揉| 少妇激情综合网| 亚洲欧洲在线播放| 在线丨暗呦小u女国产精品| 成人国产精品日本在线| 国产一区二区在线播放| 91精品综合久久久久久五月天| 91日本视频在线| 日韩在线精品视频| 日本免费久久高清视频| 日韩av一区二区在线观看| 欧美性猛交xxx| 久久久久久亚洲精品中文字幕| 97婷婷涩涩精品一区| 热99精品只有里视频精品| 国产精品中文字幕久久久| 国产伊人精品在线| 青青草原成人在线视频| 国产成人精品一区二区三区| 欧美大尺度在线观看| 亚洲精品456在线播放狼人| 日韩美女视频免费在线观看| 日韩av日韩在线观看|