2011-06-06 46 views
5

我想創建一個網站,有很多用戶,顯然擁有大量的數據庫,並且我沒有EF或NHibernate的經驗,對我來說推薦一個嗎?用MVC創建一個網站,哪個ORM更好,EF還是NHibernate?

+1

可能重複[nhibernate ,實體框架,活動記錄或linq2sql](http://stackoverflow.com/questions/1377236/nhibernate-entity-framework-active-records-or-linq2sql) – 2011-06-06 10:17:10

回答

4

EF非常適合.NET和Visual Studio。在Visual Studio中給你一個非常好的設計器,並利用LINQ編寫非常易於閱讀的查詢。

對我來說,這是一個不容小覷的想法。毫無疑問,我會選擇EF4。

1

如果你是第一次做,我會建議你去與EF,因爲它很容易打到它沒有更多的配置和隱藏的屬性....沒有必要申請任何額外的努力只需添加對象,你的任務是完成。

但如果你看起來性能更好去NHibernate。

1

答案取決於您在後端使用的數據庫。如果您使用的是任何Microsoft數據庫,那麼EF就是要走的路。

Oracle沒有支持EF的客戶端(即將到來),因此您需要使用NHibernate與Oracle交談,直到他們更新客戶端。

0

我會去參加NHibernate,因爲它可以比EF更好地調整性能,並且可以跨不同的數據庫更好地移植。

第一次使用asp.net mvc時,可以考慮使用S#arp architecture。它使用NHibernate。在網站上清楚地說明了如何快速入門。

0

也沒有。

我過去一年使用過EF,而且我遇到的問題都不值得一提。

我已經告訴我的同齡人 - 如果我可以回去的時間,我會使用存儲過程與一個簡單的API抽象它。

要麼是使用「輕量級」的ORM,如Dapper或Massive。

EF給了我太多的膨脹,與關聯的複雜性(特別是繼承模型),錯誤從未修復,以及在無狀態環境(如MVC)中「更新」實體的問題。

真的不在乎我是否得到了低估 - 只是想把我的兩分錢。最初我喜歡EF,因爲我來自L2SQL背景,所以這是一個簡單的過渡。但是,一旦我開始在封面下挖掘,我發現它是多麼痛苦的工作。

這就是說 - 我沒有使用NHibernate所以我不能評論,只評論實體框架。

堅持靠近金屬 - 從長遠來看,您將獲得更好的表現。在「真實」模型中編寫代碼 - SQL,使用索引,讓SQL Server(或Oracle)的引擎做到最好。因爲LINQ框架的一致性和智能性,IMO(這就是我們在這裏可以做的所有觀點),當你有一個非基本模型時,LINQ-Entities並不會產生足夠好的SQL )。

我EF4的眼中釘:

  1. 無法急於負荷只有特定的 「類型」。例如,如果您將PostLocation設置爲*..*,並且您有Question作爲一種郵政類型,則無法檢索Location並且僅僅是Question的。您必須急於加載全部Posts,或使用匿名類型投影。一般來說,急切的加載是非常痛苦的。

  2. 在無狀態的POCO場景中更新現有實體間的關係。同樣,如果你有一個Post,其中有許多Location的,和你想變化Location現有Post鏈接到,有沒有簡單的方法與MVC控制器動作這樣做。爲了讓EF在處理POCO時認定關係modified,您需要將其設置爲已修改。但是如果你有POCO的話,關係通常是ICollection<TPOCO>,所以你沒有這些內置的方法。當您執行Save時,最終手動將實體狀態設置在OSM的內部。我最終手動合併實體,基本上是從左到右。

  3. 沒有批處理語句。我相信NHibernate支持這個。這是EF的大問題,特別是如果您想在單次旅行中更新多個對象。我通常最終使用存儲過程,首先擊敗EF的要點。

  4. 無法將查找表映射到枚舉的。。好吧,這不是一個大問題,但它是一個令人討厭的問題。查找表是自然適合的枚舉,但EF根本不支持它 - 儘管從第1天開始社區提出請求。不知道爲什麼沒有放入。

相關問題