近日,微軟發(fā)布Entity Framework Core 2.0終極版以及.NET Core 2.0和ASP.NET Core 2.0。Entity Framework (EF) Core是輕量級(jí)跨平臺(tái)的Entity Framework版本,也是.NET的對(duì)象或關(guān)系映射框架。
EF Core此次的最新主要包括更高效、強(qiáng)大的LINQ實(shí)現(xiàn)、簡(jiǎn)化的提供程序模型及其使用的DI。EF Core此次的更新主要是針對(duì)最新.NET Standard 2.0。
對(duì)LINQ的優(yōu)化從處理子查詢開始,優(yōu)化后這些子查詢不再需要嵌套。而且當(dāng)請(qǐng)求很少時(shí),LINQ也不再將所有列作為檢索對(duì)象。
EF.Functions屬性也被添加進(jìn)EF Core,EF.Functions屬性可以用于將運(yùn)算符映射到數(shù)據(jù)庫函數(shù)或運(yùn)算符中,然后在LINQ查詢中調(diào)用。這個(gè)版本還是添加了Like()運(yùn)算符,因此在查詢中可使用EF.Functions.Like(),需要時(shí)Like()會(huì)被轉(zhuǎn)化成SQL中LIKE形式或者在內(nèi)存中進(jìn)行評(píng)估。
全局查詢過濾器是本次優(yōu)化的另一個(gè)看點(diǎn),用戶可在模型中指定在DbContext中執(zhí)行的所有查詢的實(shí)體,但一直被EF Core用戶呼聲很高的優(yōu)化點(diǎn)卻仍然“缺席”——SQL生成仍不支持GROUP BY。對(duì)此微軟做出回應(yīng):EF Core 2.1版本中會(huì)添加該功能。
另外一個(gè)“缺席”的是優(yōu)化點(diǎn)是對(duì)復(fù)雜類型的支持。Entity Framework中的復(fù)雜類型可用但依賴于所有類型或子類型。所有實(shí)體或子實(shí)體可以被定義,這些實(shí)體可將其他實(shí)體中的屬性分組,這與EF6中使用的復(fù)雜類型非常相似,唯一不同的是它具有包含參考導(dǎo)航屬性的能力。
由于Entity Framework Core 2.0中使用不同的語法,所以將EF模型從其他版本引入EF核心變得更加困難。
用戶的另一個(gè)失望點(diǎn)是核心SQL概念即存儲(chǔ)過程的缺席。存儲(chǔ)過程在服務(wù)器上執(zhí)行比將所有數(shù)據(jù)傳輸?shù)綉?yīng)用程序進(jìn)行處理具有更高的效率,但是在2.0版本中卻沒有這個(gè)功能。
其他尚未添加的功能還包括空間類型、延遲加載的支持。這些在完整的Entity Framework版本中應(yīng)該看到的功能可能只能寄希望于EF Core 2.1版本了。