.Neter们,你真的应该了解下EFCore3.x
本期導(dǎo)讀:
技術(shù)文,帶你了解關(guān)于EntityFrameworkCore3.x的那些事,本文共1493個字,閱讀大約需要3分鐘。文末福利不要錯過哦!
是的各位.Neter,不用懷疑,使用O/RM的開發(fā)者越來越多了,從風(fēng)起云涌的各式O/RM框架都可見一斑了。以下是我用過的一些。
NHibernate
SqlSugar?
Dos.ORM
Dapper?
PetaPoco
EntityFramework?
EntityFrameworkCore
其中NHibernate是我使用過的第一個O/RM框架,開始驚艷慢慢乏味,輕量級的Dapper也深受喜愛。奈何我是微軟忠粉,從最早的未完成產(chǎn)品LinqToSql追到EntityFramework的N個版本,然后終于在.NetCore里面尋到了我想要的O/RM,EntityFramworkCore3.1(后續(xù)簡稱EFCore)。下面我認真給.Neter們科普下EFCore的新東西,相信你也會愛上的。
1
?直面O/RM性能差
說到O/RM,很多人會嗤之以鼻,性能差,這是真的嗎?所謂ORM,其實就是用面向?qū)ο蟮乃枷雭矸庋b對數(shù)據(jù)庫的訪問操作,能以操作對象的方式來完成數(shù)據(jù)庫的操作。開發(fā)者不用關(guān)心數(shù)據(jù)庫,甚至可以完全不用寫Sql,確實是件好事兒!那為啥會說性能差呢?
成也蕭何敗也蕭何,正是因為自動化了數(shù)據(jù)庫操作,該過程是僵硬的,會導(dǎo)致在復(fù)雜的數(shù)據(jù)庫環(huán)境下無法保障性能。但這怪O/RM框架嗎?一方面O/RM設(shè)計的目標只是簡化Sql,另一方面來說,使用O/RM性能差更多是使用的問題,而不是框架的問題。沒有低性能的框架,只有不會用的開發(fā)者!當(dāng)然,優(yōu)秀的框架是能讓開發(fā)者更簡單更高效,EFCore里面,就有多個跟性能相關(guān)的新特性,一起來看看!
2
?EFCore前世今生
2008年發(fā)布了EntityFramework第一個版本3.5,到2017年發(fā)布的6.2.0最新版本,累計發(fā)布了16個正式版本,常規(guī)O/RM框架能做的事兒,EF也已經(jīng)做得非常優(yōu)秀了。而EFCore則是站在巨人的肩膀上的,當(dāng)下最新版本EFCore3.1還包含了多個前所未有的新特性,可謂是開發(fā)者福音!(為配合.Net5,EFCore下一個版本也叫EFCore5)
(1)Sql索引支持
數(shù)據(jù)查詢時,通過控制linq語句順序,可以做到走索引,現(xiàn)在EFCore在Code Fitst時,在ModelCreating里面可以直接配置非聚集索引了,主鍵還是默認聚集索引的。擔(dān)心O/RM性能的小伙伴兒,有必要來好好看看。
(2)數(shù)據(jù)庫讀寫分離支持
讀寫分離是中大型項目必備了,EFCore本身可以通過option來支持,輕松實現(xiàn)單Context連接多數(shù)據(jù)庫,完成數(shù)據(jù)庫讀寫分離支持。不過在實際開發(fā)中,我更愿意封裝一層ContextFactory來管控,還能做到復(fù)雜均衡。
(3)便攜數(shù)據(jù)庫遷移
項目開發(fā)中,數(shù)據(jù)庫結(jié)構(gòu)的變更一般都是腳本支持,面對數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)的的變更,數(shù)據(jù)的升級,只能編寫復(fù)雜的Sql腳本;老師就有過慘痛的經(jīng)歷。而EFCore徹底解決了這個問題,每次數(shù)據(jù)庫結(jié)構(gòu)的變化,都可以保存一個數(shù)據(jù)庫遷移文件,遷移文件輕松生成數(shù)據(jù)庫。每個遷移文件對應(yīng)數(shù)據(jù);任何時期,都可以根據(jù)對應(yīng)的遷移文件生成數(shù)據(jù)庫。
1
EFCore內(nèi)置Api直接生成數(shù)據(jù)庫,一次配置輕松生成
2
EFTool工具遷移數(shù)據(jù)庫,生成遷移文件再生成數(shù)據(jù)庫
3
dotNet命令遷移,生成遷移文件,生成數(shù)據(jù)庫
(4)內(nèi)置數(shù)據(jù)轉(zhuǎn)換器
使用O/RM開發(fā)的小伙伴兒,基本上都離不開AutoMapper,因為總會有些數(shù)據(jù)在存儲和程序中的類型不一致,現(xiàn)在EFCore中直接內(nèi)置了數(shù)據(jù)轉(zhuǎn)換器,還支持自定義模式,原生支持讓性能更高使用更輕松!
(5)各種數(shù)據(jù)庫支持
EFCore基本上已經(jīng)覆蓋了市面上全部的主流關(guān)系型數(shù)據(jù)庫,甚至還支持了內(nèi)存數(shù)據(jù)庫。一招鮮可以吃遍天了,簡直了~ 說到封裝框架,我不是針對誰,微軟獨一檔!下面是整理的詳細清單:
以上是EFCore中相對其他O/RM框架的一些新特性和優(yōu)勢,此外要在開發(fā)中應(yīng)用好EFCore,還有蠻多需要學(xué)習(xí)的,比如數(shù)據(jù)初始化、Linq查詢、復(fù)雜查詢、延遲加載、惰性加載、級聯(lián)刪除、內(nèi)置假刪除,還有分布式環(huán)境下的數(shù)據(jù)一致性,分布式事務(wù)等等,都是不可或缺的。
這里給大家推薦一個EFCore專題課,一周特訓(xùn),各種知識點一網(wǎng)打盡,原價288元課程本公眾號粉絲限時免費,直接掃碼進專用學(xué)習(xí)交流群!
福
利
福
利
福
利
按照慣例,再給大家來些福利了。本次專題是Asp.NetCore3.1+EFCore實戰(zhàn),需要配套的知識點很多,下面整理了一套預(yù)習(xí)資料,包括有我之前一套手寫O/RM框架的源碼,值得看看,趕緊掃碼領(lǐng)取哈。
總結(jié)
以上是生活随笔為你收集整理的.Neter们,你真的应该了解下EFCore3.x的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Asp.Net Core Ocelot
- 下一篇: istio回归「单体应用」对我们的启发