用于.NET Core的ORM

責(zé)任編輯:editor004

作者:Jonathan Allen

2017-12-08 11:18:45

摘自:INFOQ

盡管EF Core正努力提供視圖和存儲(chǔ)過(guò)程等基本數(shù)據(jù)庫(kù)特性,但是開(kāi)發(fā)人員也在尋求能滿足他們數(shù)據(jù)訪問(wèn)需求的ORM工具。該特性無(wú)疑會(huì)受到DBA的歡迎

盡管EF Core正努力提供視圖和存儲(chǔ)過(guò)程等基本數(shù)據(jù)庫(kù)特性,但是開(kāi)發(fā)人員也在尋求能滿足他們數(shù)據(jù)訪問(wèn)需求的ORM工具。下面列出一些相對(duì)廣為使用的ORM。

LLBLGen Pro Runtime Framework

LLBLGen Pro Runtime Framework是一種“可選”的ORM,它是與LLBLGen實(shí)體建模工具一并使用的。這里稱其為“可選的”,是因?yàn)樗材芎虴ntity Framework等其它ORM一起工作。

類似于Entity Framework,LLBLGen Pro Runtime Framework也是一種OOP風(fēng)格的完備ORM(Full ORM)。但是它在幾個(gè)方面上有所差異,首先是它更側(cè)重于性能。盡管EF Core的性能顯著高于經(jīng)典的Entity Framework,但是兩者依然明顯地低于其它的ORM。LLBLGen Pro的作者Frans Bouma發(fā)起了一個(gè)性能比賽,意在比較各種.NET數(shù)據(jù)訪問(wèn)和ORM實(shí)現(xiàn)的速度。

LLBLGen Pro Runtime Framework也不同于EF/EF Core,它并非綁定于上下文(Context)的。每個(gè)實(shí)體無(wú)需維持一個(gè)打開(kāi)的上下文,就可以追蹤自身的改變,并在內(nèi)存中操作對(duì)象圖。該特性無(wú)疑會(huì)受到DBA的歡迎,因?yàn)闊o(wú)需維持打開(kāi)的上下文,意味著不需要維持一個(gè)打開(kāi)的數(shù)據(jù)庫(kù)連接,否則需要操作數(shù)據(jù)庫(kù)的連接池。

與大多數(shù)用于.NET Core的ORM一樣,在LLBLGen Pro Runtime Framework的Core版本上存在一些限制。但這些限制主要局限于.NET Core本身的缺失特性。例如,TransactionScope目前尚不被SqlClient支持、很少一部分對(duì)象是可二進(jìn)制序列化等。

Dapper

另一種是廣為人知的微ORM(Micro-ORM)產(chǎn)品Dapper。Dapper常被認(rèn)為是最快的ORM,幾乎總是保持著.NET ORM基準(zhǔn)測(cè)試的頭名位置。

通常使用Dapper實(shí)現(xiàn)對(duì)原始SQL的調(diào)用并物化查詢結(jié)果,因此它在.NET和.NET Core上的工作情況基本相同。Dapper不同于完備ORM,它并不提供任何SQL生成功能。雖然許多開(kāi)發(fā)人員并不相信由ORM生成的SQL,但這還是會(huì)令Dapper在使用上要比其它ORM產(chǎn)品更為繁瑣。

LINQ to DB

LINQ to DB稱自己是“超出Dapper、Massive、PetaPoco等微ORM產(chǎn)品一步之遙”。它不具備一些在Entity Framework中使用會(huì)引發(fā)性能問(wèn)題的特性,例如更改追蹤。

LINQ to DB中的Join操作有些不同。在EF中,任何需要執(zhí)行“Join”操作之處,事實(shí)上是作為子對(duì)象或集合(Collection)對(duì)待的。所生成的SQL自然會(huì)使用Join操作,但是當(dāng)結(jié)果集被物化為對(duì)象后,SQL語(yǔ)句的執(zhí)行就不再依賴于Join操作了。

LINQ to DB實(shí)際執(zhí)行Join操作,具體實(shí)現(xiàn)為“Left Join”和“Inner Join”操作。如果使用EF解釋LINQ,那么生成語(yǔ)句在語(yǔ)法雖然略顯奇特,但更好地匹配了數(shù)據(jù)庫(kù)的實(shí)際工作情況。

DevExpress XPO

eXpressPersistent Objects(XPO)是一種商業(yè)產(chǎn)品。Reddit用戶“-GrapH-”對(duì)其如此評(píng)價(jià):

我使用DevExpress XPO已有11年了。今年10月,它開(kāi)始支持.NET Standard 2.0。盡管它是一個(gè)商業(yè)產(chǎn)品,但支持.NET Core的首個(gè).NET測(cè)試版(v17.2.2)將對(duì)所有的用戶免費(fèi)使用。進(jìn)一步更新盡管需要付費(fèi),但是其中包括了視覺(jué)設(shè)計(jì)工具和技術(shù)支持。雖然該ORM不同于EF,并且推出的時(shí)間更長(zhǎng)(如果我沒(méi)有記錯(cuò)的話,它的第一個(gè)版本是針對(duì).NET 1.1發(fā)布的),但是其中基本包含了各種規(guī)模應(yīng)用程序所需的所有特性。它的演示和教程提供于https://github.com/DevExpress/XpoNetCoreDemos。

你的選擇是什么?

現(xiàn)有多種.NET Core可用的ORM。如果你已使用其中一種達(dá)數(shù)月時(shí)間,歡迎將你的認(rèn)識(shí)反饋給我們。

譯者注:在原文評(píng)論中,有人指出NHibernate 5和EntityLite也支持.NET Core 2.0。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)