2011-03-03 39 views
5

可能重複:
Entity Framework 4 vs NHibernate爲什麼我應該打擾實體框架?

我一直在努力,現在開發10年以上的軟件。
我主要使用MS技術,從VB3,COM +開始,然後是ASP.NET和ASP.NET MVC。
在所有這些年裏,我都使用了所有新的光輝MS技術來訪問數據庫。
我記得記錄集,數據集,rds,ado,ado.net等等。 每次在我看來,這是最後一個明確的但每隔幾年,再一次嘗試學習一些新的東西,持續了幾個月。 現在我已經跳上了Nhibernate旅行車,我非常喜歡那個傢伙。 我想開始做一些實體框架,但我想我可以等待下一個;-) 你對此有什麼看法?

+3

我認爲你應該採用實體框架,因爲它是數據庫訪問的最後一種權威技術。 ;) – 2011-03-03 12:57:53

回答

2

嗯,我當然是little biased,但是如果你已經在使用NHibernate,那麼沒有什麼可以通過切換到EF來獲得和減少很多。

與其他框架相比,EF尚不成熟。您認爲理所當然的所有功能(擴展性,緩存,批處理,日誌記錄,基於約定的映射,對用戶定義的值類型的支持等)都不在EF中。

+2

確實有偏差... -1 – 2011-03-03 14:16:48

+0

+1有偏見,但提到的功能列表在EF中完全缺失,這是你無法隱藏的真實情況。 – 2011-03-03 14:36:00

0

我還沒有試過EF,所以會有更好的答案,但我的觀點是:

EF有它是由微軟提供的優勢,可能會更好地與組件集成(例如少工作在一個gridview中啓用分頁)

NHibernate是很多人已經知道,使用和已經想出瞭如何爲他們工作的東西(例如,你已經有會話每請求和會話每單元可能是審計框架,或與其他免費框架/庫的集成等)

EF在我看過的演示中看起來相當不錯,但他們也做了一些真正愚蠢的事情,這會讓我發瘋(小命如命名約定等)。我也不相信微軟會從嚮導生成正確的代碼,但這是對老產品的偏見,在這種情況下可能不合理。

如果你真的很好奇,可以用EF來做一個小型項目來比較(並讓我們知道它是如何發生的)。對於我來說,我一直堅持NH,直到EF看起來如此引人注目,以至於我不能再忽視它。

+0

爲了記錄,EF本身不強制執行任何命名約定。它實際上是工具和代碼優先方法,根據事物的名稱(如ID/Id/ProductId等)進行決策。 – 2011-03-03 13:26:42

+0

是的。另一方面,他們推薦可怕的命名約定。我在一個演示中,這個傢伙非常自豪能夠擁有一個叫做'person'的POCO,它會自動創建一個名爲'people'的表。 2分鐘後,他選擇了兩個錯誤的一個,當他試圖運行它時,演示發生了爆炸。 – Kendrick 2011-03-03 14:04:42

5

我正在玩EF很多。我在愛好項目中以及在實際項目中使用它。我也在玩EF Code First,目前在CTP中(但很快就會發布)。

我的看法:

當我比較直接提供在.NET EFv4是最好的數據訪問技術。沒有關於這個的討論 - 它是真的。這是來自MS的第一個工具,至少可以稱爲ORM。它爲您提供了realtion和object world之間的一些基本映射場景,並通過Linq-to-entities簡化了數據訪問。如果您遇到EF問題,您仍然可以回退並通過EF類調用直接的SQL,這將再次爲您處理映射。如果你想知道更多,我們可以討論你感興趣的功能 - 我不想在這裏寫一本書(更多的已經存在THE BOOK)。

是EF不是市場上最好的工具。它還很年輕,許多功能缺失或沒有按預期工作。可擴展性也很可怕 - EF的當前版本大多是單片黑盒,沒有可擴展性。拆解EF組件表明它充滿了內部密封的靜態類。另一個問題是EF的學習曲線要​​長得多,尤其是如果你以前從未使用過ORM。

我開始學習NHibernate,我不得不說這個功能集很棒,但我還沒有在任何項目中使用它。另一個問題是,例如在我目前的工作中,我們不允許使用它(我即將離開)。

這個選擇取決於你,但至少知道可用工具的基本知識總是很好的。

+1

對於「EF大多是單塊黑盒子,沒有可擴展性點」這是非常真實的,這就是所有這一切。新罕布什爾州是非常可擴展的和開放,你總是可以看看來源! – 2011-03-03 13:59:45

+0

您也可以查看EF源代碼。實際上,您可以查看整個.NET框架的源代碼。 http://referencesource.microsoft.com/ – 2011-03-03 18:24:04

+0

@Craig:我每天都在看源代碼,但這並不意味着代碼乾淨而且易於理解 - 這是非常糟糕的,因爲文檔也不是很乾淨在許多情況下。這與許多其他框架(不僅是ORM)有很大的不同,在這個框架中,架構非常仔細地定義,並且很多時候你會得到單元測試來指導你。這是MS的永久性問題 - 離.NET核心更遠,你會得到更糟糕的代碼。 – 2011-03-03 18:28:46

相關問題