LINQ to SQL和Entity Framework都是一種包含LINQ功能的對象關系映射技術。
那么為什么會有LINQ這個東西的出現呢。
簡單來說LINQ是為了滿足不知道怎么操作數據庫的程序員開發設計的,LinQ 可以讓他們以一種面向數據對象的方式來思考,及持久化他們的數據。
LINQ to SQL(L2S)和Entity Framework的本質區別
EF對數據庫架構和我們查詢的類型實行了更好的解耦。使用EF,我們查詢的對象不再是完全對應數據庫架構的C#類,而是更高層的抽象:Entity Data Model。這為我們提供了額外的靈活性,但是在性能和簡單性上面也會有所損失。
優點:
LINQ to SQL,是一個輕量級的ORM框架,為Microsoft SQL Server數據庫提供快速的應用程序開發,其優點是易於使用、簡單、高性能。
Entity Framework,為創建數據庫架構和實體類之間的映射提供了更好的靈活性,它還通過提供程序支持除了SQL Server之外的第三方數據庫。
EF 4.0一個非常受歡迎的改進是它現在支持與LINQ to SQL幾乎同樣的查詢功能。這意味着我們在系列文章中的LINQ-to-db查詢可以同時適用於EF 4.0和L2S。而且,這也使得L2S成為我們學習使用LINQ查詢數據庫的理想技術,因為其保持了對象關系方面的簡單性,並且我們學習到的查詢原則和技術同樣適用於EF。
說明:.NET 3.5下建議使用LINQ,該版本已經完全支持成熟的LINQ;使用EF則建議使用.NET 4.0(VS2010)以上的版本,該版本有成熟完整的EF
|
|
LINQ to SQL |
Entity Framework |
| 復雜度 |
相對不復雜 |
相對比較復雜 |
| 模型 |
域模型(Domain model) |
概念數據模型(Conceptual data model) |
| 數據庫服務器 |
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支持兩種類型的開發模式,數據庫優先和編碼優先。數據庫優先開發,數據庫已經存在,所以不需要由模型生成數據庫。編碼優先,你要先創建你的模型,然后由模型生成數據庫。
原文: http://blog.163.com/kunkun0921@126/blog/static/169204332201401605839384/
