.NET 4.0實體框架和LINQ to SQL之間有什麼區別?

.net .net-4.0 entity-framework linq-to-sql

我正在檢查第二版Professional ASP.NET MVC並實現了EF取代LINQ to SQL。我從第一本書中熟悉LINQ to SQL,但我對EF一無所知。無論如何,在閱讀代碼時,似乎沒有任何改變,除了名稱。相同的舊存儲庫類,相同的舊函數。

我做了一點研究。我知道LINQ不僅限於SQL。 EF也不限於Microsoft系列SQL服務器。 在這個2歲的問題中,人們對EF並不滿意,並表示它過於復雜。但現在我在EF名下讀相同的代碼。只有使用LINQ to SQL的ADO.NET實體模型生成類。任何人都可以清除關於EF功能的大驚小怪,因為它現在是事實上的標準ORM嗎?

一般承認的答案

它們有點相似,並且可以以非常類似的方式使用,代碼方面,但它們有一些重要的區別。請注意,“LINQ”與“LINQ to SQL”不同; EF也使用LINQ。一些值得注意的差異是:

  • LINQ to SQL主要是SQL Server,而不是設計和實現。如果您有兼容的ADO.NET提供程序,則EF旨在支持並支持多個DB。
  • 開箱即用,LINQ to SQL的數據庫元數據更改故事非常糟糕。您必須從頭開始重新生成模型的某些部分,否則會丟失自定義。
  • EF支持多對多關係和繼承等模型功能。 LINQ to SQL不直接支持這些。
  • 在.NET 3.5中,LINQ to SQL比EF更好地支持特定於SQL Server的功能。這在.NET 4中大多不適用;他們在這方面非常相似。
  • EF允許您選擇Model First,DB First或Code First建模。 LINQ to SQL,開箱即用,實際上只支持DB First。

熱門答案

EF隨著v4.0而成熟。在此之前,使用它有點痛苦,我不推薦它。現在我的建議是所有新的LINQ到DB代碼都使用EF4。

就新功能而言,LINQ部分實際上與LINQ to SQL非常相似。但它是一個完全不同的架構:EF4充當(EF)ADO.NET提供程序的LINQ提供程序,然後包裝另一個ADO.NET提供程序。所以有新的東西,比如Entity SQL(我不使用),EF支持不同的底層ADO.NET提供程序(我使用它)。

EF使用的XML建模系統也允許更強大的映射抽象 。我經常使用的是具有映射到實體繼承關係的相同主鍵的不同表;根據我的理解,在LINQ to SQL中執行此操作的唯一方法是通過“選擇器列”(儘管我從未在LINQ to SQL中嘗試過這一點)。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因