Entity Framework 与 LINQ to SQL
Entity Framework和LINQ to SQL到底有什么區(qū)別?這是一個(gè)很常見(jiàn)的問(wèn)題。下面的表中簡(jiǎn)要羅列了兩種技術(shù)的主要區(qū)別。
| ? | LINQ to SQL | Entity Framework |
| 復(fù)雜度 | 相對(duì)不復(fù)雜 | 相對(duì)比較復(fù)雜 |
| 模型 | 域模型(Domain model) | 概念數(shù)據(jù)模型(Conceptual data model) |
| 數(shù)據(jù)庫(kù)服務(wù)器 | SQL Server | 多種數(shù)據(jù)庫(kù)產(chǎn)品 |
| 開(kāi)發(fā)時(shí)間 | 快速應(yīng)用開(kāi)發(fā) | 需要較長(zhǎng)時(shí)間,但支持更多特性 |
| 繼承 | 困難 | 容易 |
| 文件類(lèi)型 | DBML文件 | EDMX,CDSL,MSL,SSDL文件 |
| 復(fù)雜類(lèi)型支持 | 不支持 | 支持 |
| 查詢能力 | 通過(guò)DataContext | ESQL,對(duì)象服務(wù), Entity Client |
| 性能 | 第一次查詢較慢 | 第一次查詢也較慢,但總體優(yōu)與LINQ to SQL |
| 完善 | 不再出新版本 | 還出新版本 |
| 從模型生成數(shù)據(jù)庫(kù) | 不支持 | 支持 |
?
復(fù)雜度:支持越多的特性就會(huì)越復(fù)雜。LINQ to SQL所支持的特性比較少,所以也就相對(duì)不太復(fù)雜;而EntityFramework支持的特性比較多,所以相對(duì)比較復(fù)雜。
模型:LINQ to SQL在數(shù)據(jù)表與類(lèi)之間提供了一對(duì)一的映射。如果你有Customers,Orders, 和Lineitems表,你就會(huì)有Customer,Order, 和Lineitem類(lèi)來(lái)匹配每一個(gè)表。EntityFramework可以使你有一個(gè)Customer類(lèi),而這個(gè)類(lèi)可以匹配多個(gè)表。這就意味著公司名可以 在一個(gè)表中,但是地址是在另一個(gè)表中,而電話號(hào)碼又在另一個(gè)表中,等等。
數(shù)據(jù)庫(kù)服務(wù)器:LINQ to SQL只支持Microsoft SQL Server 2000及之后的版本,但即使是SQLServer2000也有很多限制。EntityFramework可以支持IBMDB2, Sybase SqlAnywhere, Oracle, SQLAzure,還有其他很多。
開(kāi)發(fā)時(shí)間:LINQ to SQL很容易學(xué),開(kāi)發(fā)起來(lái)也很快,但是LINQ to SQL有一些限制,在開(kāi)發(fā)較復(fù)雜的應(yīng)用時(shí)可能會(huì)產(chǎn)生問(wèn)題。EntityFramework的能力更強(qiáng),雖然學(xué)習(xí)及應(yīng)用起來(lái)比較慢,但是對(duì)更多的特性的支持使得在開(kāi)發(fā)較復(fù)雜的應(yīng)用時(shí)可以使問(wèn)題最小化。
繼承:LINQ to SQL支持TPH,而EntityFramework支持TPH和TPT,并且對(duì)TPC也部分支持。
文件類(lèi)型:LINQ to SQL使用包含XML的數(shù)據(jù)庫(kù)標(biāo)記語(yǔ)言(DBML)文件來(lái)映射entity與數(shù)據(jù)表。EntityFramework 使用四個(gè)文件。第一個(gè)是Entity Data Model (EDMX),這個(gè)是在設(shè)計(jì)器中使用的。在編譯時(shí)EDMX文件產(chǎn)生了其他三個(gè)文件。另外三個(gè)文件中,第一個(gè)是ConceptualSchema Definition Language(CSDL)文件,其包含概念模型的XML定義。第二個(gè)是SchemaDefinition Language(SSDL)文件,其包含存儲(chǔ)模型的定義。第三個(gè)文件是Mapping Specification Language(MSL)文件,其包含概念模型與存儲(chǔ)模型之間的映射。
復(fù)雜類(lèi)型支持:比如說(shuō),一個(gè)客戶有電話號(hào)碼,但你想要電話號(hào)碼定義為國(guó)家區(qū)號(hào),地區(qū)號(hào),城市區(qū)號(hào),號(hào)碼和分機(jī)號(hào)。LINQto SQL不支持這種復(fù)雜類(lèi)型,而EntityFramework支持。
查詢能力:LINQ to SQL通過(guò)DataContext對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢。EntityFramework通過(guò)ObjectContext通過(guò)LINQto Entities進(jìn)行查詢。Entity Framework還提供了ESQL,它是一種類(lèi)似SQL的查詢語(yǔ)言,很適合在模型定義中定義查詢。EntityFramework還包含了 ObjectQuery類(lèi),用于對(duì)象服務(wù)在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建查詢。最后EntityFramework還包含EntityClientProvider,它 用于對(duì)概念模型進(jìn)行查詢。
性能:LINQ to SQL和Entity Framework第一次執(zhí)行查詢的時(shí)候都比較慢,但之后性能都讓人比較滿意。EntityFramework性能要稍微優(yōu)于LINQto SQL。
完善:微軟在發(fā)布了Entity Framework之后就停止了發(fā)布新的LINQ to SQL,但由于LINQto SQL的簡(jiǎn)單性,它還是很受歡迎的,所以微軟仍將繼續(xù)對(duì)LINQto SQL的用戶進(jìn)行支持與反饋,但是LINQto SQL將不再發(fā)布新版本進(jìn)行完善。
由模型生成數(shù)據(jù)庫(kù):LINQ to SQL沒(méi)有能力由模型生成數(shù)據(jù)庫(kù)。Entity Framework支持兩種類(lèi)型的開(kāi)發(fā)模式,數(shù)據(jù)庫(kù)優(yōu)先和編碼優(yōu)先。數(shù)據(jù)庫(kù)優(yōu)先開(kāi)發(fā),數(shù)據(jù)庫(kù)已經(jīng)存在,所以不需要由模型生成數(shù)據(jù)庫(kù)。編碼優(yōu)先,你要先創(chuàng)建你的模型,然后由模型生成數(shù)據(jù)庫(kù)。
轉(zhuǎn)載于:https://www.cnblogs.com/tianguook/p/3942390.html
總結(jié)
以上是生活随笔為你收集整理的Entity Framework 与 LINQ to SQL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《三基色组成方式》转
- 下一篇: log4j源码阅读(一)之Logger