.Neter們,你真的應(yīng)該了解下EntityFrameworkCore3.x

本期導(dǎo)讀:
技術(shù)文,帶你了解關(guān)于EntityFrameworkCore3.x的那些事,本文共1493個(gè)字,閱讀大約需要3分鐘。文末福利不要錯(cuò)過(guò)哦!
是的各位.Neter,不用懷疑,使用O/RM的開(kāi)發(fā)者越來(lái)越多了,從風(fēng)起云涌的各式O/RM框架都可見(jiàn)一斑了。以下是我用過(guò)的一些。
NHibernate
SqlSugar
Dos.ORM
Dapper?
PetaPoco
EntityFramework?
EntityFrameworkCore
其中NHibernate是我使用過(guò)的第一個(gè)O/RM框架,開(kāi)始驚艷慢慢乏味,輕量級(jí)的Dapper也深受喜愛(ài)。奈何我是微軟忠粉,從最早的未完成產(chǎn)品LinqToSql追到EntityFramework的N個(gè)版本,然后終于在.NetCore里面尋到了我想要的O/RM,EntityFramworkCore3.1(后續(xù)簡(jiǎn)稱EFCore)。下面我認(rèn)真給.Neter們科普下EFCore的新東西,相信你也會(huì)愛(ài)上的。
一 直面O/RM性能差
說(shuō)到O/RM,很多人會(huì)嗤之以鼻,性能差,這是真的嗎?所謂ORM,其實(shí)就是用面向?qū)ο蟮乃枷雭?lái)封裝對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)操作,能以操作對(duì)象的方式來(lái)完成數(shù)據(jù)庫(kù)的操作。開(kāi)發(fā)者不用關(guān)心數(shù)據(jù)庫(kù),甚至可以完全不用寫(xiě)Sql,確實(shí)是件好事兒!那為啥會(huì)說(shuō)性能差呢?


二 EFCore前世今生
2008年發(fā)布了EntityFramework第一個(gè)版本3.5,到2017年發(fā)布的6.2.0最新版本,累計(jì)發(fā)布了16個(gè)正式版本,常規(guī)O/RM框架能做的事兒,EF也已經(jīng)做得非常優(yōu)秀了。而EFCore則是站在巨人的肩膀上的,當(dāng)下最新版本EFCore3.1還包含了多個(gè)前所未有的新特性,可謂是開(kāi)發(fā)者福音!(為配合.Net5,EFCore下一個(gè)版本也叫EFCore5) (1)Sql索引支持 數(shù)據(jù)查詢時(shí),通過(guò)控制linq語(yǔ)句順序,可以做到走索引,現(xiàn)在EFCore在Code Fitst時(shí),在ModelCreating里面可以直接配置非聚集索引了,主鍵還是默認(rèn)聚集索引的。擔(dān)心O/RM性能的小伙伴兒,有必要來(lái)好好看看。 (2)數(shù)據(jù)庫(kù)讀寫(xiě)分離支持 讀寫(xiě)分離是中大型項(xiàng)目必備了,EFCore本身可以通過(guò)option來(lái)支持,輕松實(shí)現(xiàn)單Context連接多數(shù)據(jù)庫(kù),完成數(shù)據(jù)庫(kù)讀寫(xiě)分離支持。不過(guò)在實(shí)際開(kāi)發(fā)中,我更愿意封裝一層ContextFactory來(lái)管控,還能做到復(fù)雜均衡。

(3)便攜數(shù)據(jù)庫(kù)遷移 項(xiàng)目開(kāi)發(fā)中,數(shù)據(jù)庫(kù)結(jié)構(gòu)的變更一般都是腳本支持,面對(duì)數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)的的變更,數(shù)據(jù)的升級(jí),只能編寫(xiě)復(fù)雜的Sql腳本;老師就有過(guò)慘痛的經(jīng)歷。而EFCore徹底解決了這個(gè)問(wèn)題,每次數(shù)據(jù)庫(kù)結(jié)構(gòu)的變化,都可以保存一個(gè)數(shù)據(jù)庫(kù)遷移文件,遷移文件輕松生成數(shù)據(jù)庫(kù)。每個(gè)遷移文件對(duì)應(yīng)數(shù)據(jù);任何時(shí)期,都可以根據(jù)對(duì)應(yīng)的遷移文件生成數(shù)據(jù)庫(kù)。 1 EFCore內(nèi)置Api直接生成數(shù)據(jù)庫(kù),一次配置輕松生成
2 EFTool工具遷移數(shù)據(jù)庫(kù),生成遷移文件再生成數(shù)據(jù)庫(kù)
3 dotNet命令遷移,生成遷移文件,生成數(shù)據(jù)庫(kù)

(4)內(nèi)置數(shù)據(jù)轉(zhuǎn)換器
使用O/RM開(kāi)發(fā)的小伙伴兒,基本上都離不開(kāi)AutoMapper,因?yàn)榭倳?huì)有些數(shù)據(jù)在存儲(chǔ)和程序中的類型不一致,現(xiàn)在EFCore中直接內(nèi)置了數(shù)據(jù)轉(zhuǎn)換器,還支持自定義模式,原生支持讓性能更高使用更輕松!
(5)各種數(shù)據(jù)庫(kù)支持
EFCore基本上已經(jīng)覆蓋了市面上全部的主流關(guān)系型數(shù)據(jù)庫(kù),甚至還支持了內(nèi)存數(shù)據(jù)庫(kù)。一招鮮可以吃遍天了,簡(jiǎn)直了~ 說(shuō)到封裝框架,我不是針對(duì)誰(shuí),微軟獨(dú)一檔!下面是整理的詳細(xì)清單:

以上是EFCore中相對(duì)其他O/RM框架的一些新特性和優(yōu)勢(shì),此外要在開(kāi)發(fā)中應(yīng)用好EFCore,還有蠻多需要學(xué)習(xí)的,比如數(shù)據(jù)初始化、Linq查詢、復(fù)雜查詢、延遲加載、惰性加載、級(jí)聯(lián)刪除、內(nèi)置假刪除,還有分布式環(huán)境下的數(shù)據(jù)一致性,分布式事務(wù)等等,都是不可或缺的。
這里給大家推薦一個(gè)EFCore專題課,一周特訓(xùn),各種知識(shí)點(diǎn)一網(wǎng)打盡,原價(jià)288元課程本公眾號(hào)粉絲限時(shí)免費(fèi),直接掃碼進(jìn)專用學(xué)習(xí)交流群!

文末福利:
按照慣例,再給大家來(lái)些福利了。本次專題是Asp.NetCore3.1+EFCore實(shí)戰(zhàn),需要配套的知識(shí)點(diǎn)很多,下面整理了一套預(yù)習(xí)資料,包括有我之前一套手寫(xiě)O/RM框架的源碼,值得看看,趕緊掃碼領(lǐng)取哈。
