Entity Framework和LINQ to SQL到底有什麼區別?這是一個很常見的問題。下面的表中簡要羅列了兩種技術的主要區別。web
|
LINQ to SQL數據庫 |
Entity Framework服務器 |
複雜度app |
相對不復雜ide |
相對比較複雜性能 |
模型學習 |
域模型(Domain model)編碼 |
概念數據模型(Conceptual data model)spa |
數據庫服務器設計 |
SQL Server |
多種數據庫產品 |
開發時間 |
快速應用開發 |
須要較長時間,但支持更多特性 |
繼承 |
困難 |
容易 |
文件類型 |
DBML文件 |
EDMX,CDSL,MSL,SSDL文件 |
複雜類型支持 |
不支持 |
支持 |
查詢能力 |
經過DataContext |
ESQL,對象服務, Entity Client |
性能 |
第一次查詢較慢 |
第一次查詢也較慢,但整體優與LINQ to SQL |
完善 |
再也不出新版本 |
還出新版本 |
從模型生成數據庫 |
支持 |
不支持 |
複雜度:支持越多的特性就會越複雜。LINQ to SQL所支持的特性比較少,因此也就相對不太複雜;而EntityFramework支持的特性比較多,因此相對比較複雜。
模型:LINQ to SQL在數據表與類之間提供了一對一的映射。若是你有Customers,Orders, 和Lineitems表,你就會有Customer,Order, 和Lineitem類來匹配每個表。EntityFramework可使你有一個Customer類,而這個類能夠匹配多個表。這就意味着公司名能夠在一個表中,可是地址是在另外一個表中,而電話號碼又在另外一個表中,等等。
數據庫服務器:LINQ to SQL只支持Microsoft SQL Server 2000及以後的版本,但即便是SQLServer2000也有不少限制。EntityFramework能夠支持IBMDB2, Sybase SqlAnywhere, Oracle, SQLAzure,還有其餘不少。
開發時間:LINQ to SQL很容易學,開發起來也很快,可是LINQ to SQL有一些限制,在開發較複雜的應用時可能會產生問題。EntityFramework的能力更強,雖然學習及應用起來比較慢,可是對更多的特性的支持使得在開發較複雜的應用時可使問題最小化。
繼承:LINQ to SQL支持TPH,而EntityFramework支持TPH和TPT,而且對TPC也部分支持。
文件類型:LINQ to SQL使用包含XML的數據庫標記語言(DBML)文件來映射entity與數據表。EntityFramework 使用四個文件。第一個是Entity Data Model (EDMX),這個是在設計器中使用的。在編譯時EDMX文件產生了其餘三個文件。另外三個文件中,第一個是ConceptualSchema Definition Language(CSDL)文件,其包含概念模型的XML定義。第二個是SchemaDefinition Language(SSDL)文件,其包含存儲模型的定義。第三個文件是Mapping Specification Language(MSL)文件,其包含概念模型與存儲模型之間的映射。
複雜類型支持:好比說,一個客戶有電話號碼,但你想要電話號碼定義爲國家區號,地區號,城市區號,號碼和分機號。LINQto SQL不支持這種複雜類型,而EntityFramework支持。
查詢能力:LINQ to SQL經過DataContext對數據庫進行查詢。EntityFramework經過ObjectContext經過LINQto Entities進行查詢。Entity Framework還提供了ESQL,它是一種相似SQL的查詢語言,很適合在模型定義中定義查詢。EntityFramework還包含了ObjectQuery類,用於對象服務在運行時動態建立查詢。最後EntityFramework還包含EntityClientProvider,它用於對概念模型進行查詢。
性能:LINQ to SQL和Entity Framework第一次執行查詢的時候都比較慢,但以後性能都讓人比較滿意。EntityFramework性能要稍微優於LINQto SQL。
完善:微軟在發佈了Entity Framework以後就中止了發佈新的LINQ to SQL,但因爲LINQto SQL的簡單性,它仍是很受歡迎的,因此微軟仍將繼續對LINQto SQL的用戶進行支持與反饋,可是LINQto SQL將再也不發佈新版本進行完善。
由模型生成數據庫:LINQ to SQL沒有能力由模型生成數據庫。Entity Framework支持兩種類型的開發模式,數據庫優先和編碼優先。數據庫優先開發,數據庫已經存在,因此不須要由模型生成數據庫。編碼優先,你要先建立你的模型,而後由模型生成數據庫。
原文出自《Access Data with Microsoft .NET Framework 4》