2011-06-04 145 views
3

我們正在開始使用Razor的MVC 3項目,並且我很困惑在訪問/更新數據時採用哪種方法。我知道我們有以下選擇。使用存儲過程和實體框架的MVC 3 4

* Plain old ADO.NET 
* LINQ to SQL 
* NHibernate 
* Entity Framework 

但我傾向於使用普通老式ADO.Net更傾向於(因爲我認爲這是最快的) 我仍然會使用模型類,但一旦我從類中的數據,我想繼續使用Plain Ado.Net調用存儲過程,而不是使用EF Update方法。

如果與使用EF相比,此方法存在任何缺點,我希望得到您的意見。

(這將是一個公開的網站大量的流量!)如果你從依靠特定的數據庫上要抽象的代碼走

+1

選擇一個ORM:http://stackoverflow.com/questions/1377236/nhibernate-entity-framework-active-records-or-linq2sql/ – 2011-06-05 10:26:06

回答

4

本週在一次採訪中,我被一個候選人問到了這個問題。我們只使用存儲過程和ADO.NET方法。我們之所以選擇這個,是因爲我們發現要使用ORM創造出色的應用程序,您需要成爲使用ORM的專家。由於我在ORM中沒有任何專家,因此我不打算創建/僱傭任何人,所以堅持使用我們知道的堆棧是有意義的。

我說你需要成爲一名專家,因爲諸如Hibernate(或NHibernate)的ORM創建關係並因此創建SQL(主要是連接等)。我認爲ORM非常適合小工具或RAD環境,這些工具必須快速完成,並且可能無法永久生存。我認爲對於維護和性能更爲關鍵的大型企業應用程序而言,ADO更安全。這並不意味着這不是不可能的,但必須更加小心以確保它。

我知道這是一個非常熱門的話題,ORM比ADO簡單得多,但老實說ADO並不難。我渴望聽到社區的其他人對此有何評論!

+0

感謝您的投票user636525。我希望我的意見能幫助你下定決心。當負責任地使用ADO和ORM時,它們都是很好的工具,所以在你的項目中運氣好。 – hivie7510 2011-06-05 03:23:33

+0

很好,謝謝你。 – 2011-08-08 09:51:29

+0

我相信EF能夠很好地工作,您還需要擁有在DB中創建的所有關係 - 基本上擁有非常規範化的數據庫,並且爲了提高性能,您還需要對錶格進行非標準化處理所有這些都可以通過單個數據庫調用中的存儲過程進行高效管理。例如。爲了創建訂單,您需要在OrderHeader,OrderLine中創建一個記錄,並根據您的邏輯可能是其他幾個表,並且在這種情況下,SP會更有效。對於複雜的邏輯應用程序,通過Ado.net的SP似乎更好。 – Vikram 2014-06-04 04:55:14

1

NHibernate的是偉大的,但它似乎你這個折扣 - 沒有這個要求。

在你的情況下,我建議沿着EF路線走下去,如果你發現你遇到了任何性能瓶頸,那麼看看'plain ado.net'。

澄清,針對這個問題;

「那麼你認爲與EF路線會比大數據量的處理時,只調用與普通老式Ado.net的存儲過程有效得多」

EF創建高效的代碼,但你可能會遇到的情況下如果發現性能問題,您需要調整代碼和/或數據庫。使用EF或其他一些ORM的好處是您可以成爲一個更高效的開發人員,這將節省您的時間,並讓您專注於業務規則等,而不是使用ado手動構建數據訪問權限。網

+0

所以你認爲使用EF路徑比只調用存儲過程效率更高在處理大量數據時使用Plain Old Ado.net?出於某種原因,我總是認爲簡單的老Ado.net比其他任何東西都快! – user636525 2011-06-04 23:09:25

+0

更快但是什麼價格?你將需要做的一切,這是太多的代碼!打開連接,獲取數據,更新日期,檢查數據完整性,處理併發性,關閉... EF和Linq的一切都很簡單。 – balexandre 2011-06-04 23:16:48

0

我做了一個公共網站與各地每天浪費帶寬60GB(網站只從十二月1日至12月24日運行)和我選擇了實體框架LINQ

我沒有抱怨EF ...只有服務器無法處理這麼多的用戶,我不得不將所有圖像放入Amazon S3(使用Amazon .NET SDK)每天去除極高的帶寬。

EF緩存來電所以當檢索同一對象EF足夠精明,不會再次調用數據庫,並返回緩存的對象,一切都做得非常好,我不得不說,我不想透露對EF當我開始這個項目,但最後,這是一個WIN