2010-06-01 37 views
4

我只是從C切換到C#,並且想投入一些時間學習數據庫工作。我對以下選項感到不知所措:Linq-to-sql,ADO.NET。 nHibernate,EntityFramework,普通的舊sql(我習慣了這個)。由於我只有有限的「學習」時間(每天約2.5小時),我應該在哪裏投入時間?實體框架還是別的?

我不想學習下個月將會過時或者沒有人會僱用我的東西。

如果我學習EF,這個知識是否可以輕鬆轉移到nHibernate?

更新:我決定從nHibernate開始。雖然EF 4.0已經修復了許多缺點,但我現在還沒有VS2010,並且贏得了另外一年的勝利。所以nHibernate是現在的人。

+0

參見:http://stackoverflow.com/questions/146087/best-performing-orm-for-net和http://stackoverflow.com/questions/206197 /最佳自由ORM工具使用的,與淨2-0-3-5 – Abel 2010-06-01 17:29:17

回答

4

個人更好的整合,我認爲NHibernate的(加上FluentNHibernate和Linq到NHibernate)讓我保持最大的理智。在真實世界的項目中,在一個大型團隊中爲Entity Framework中的大型數據模型管理單個EDMX文件非常痛苦;在NHibernate中,Fluent可以讓你跨多個C#文件分離事物,或者HBM XML格式允許你使用多個XML文件。上次我使用Entity Framework時,除非每個模型都有單獨的DataContext,否則這並不容易。 (如果最近有些變化,我爲我的無知道歉)。關於NHibernate最困難的事情可能會以某種方式在大多數ORM工具中遇到你:將對象圖映射到關係模型是非常棘手的。但是,你會對延遲加載,父/子關係等事件有很多控制權;如果您使用Fluent,按照慣例進行映射也是一個巨大的勝利。但是你不會選擇微軟正在投資的工具;許多公司甚至沒有認真考慮在實體框架發佈之前使用ORM。就我個人而言,我並不想爲那些推遲這樣的決定的公司工作,直到他們的供應商找到可以通過的解決方案,但事實是,很多公司都(或將要)使用實體框架。

使用Entity Framework絕對沒有什麼問題,儘管我懷疑如果你在一個真實世界的項目中持續使用EF 4周,並且NHibernate在憤怒中持續了大約4周,你很容易就會發現NHibernate更簡單。根據我的經驗,EF一開始看起來簡單得多,但使用它的時間越長越好。NHibernate看起來和感覺起來更難,但使用它的時間越長越簡單,越明顯。

+0

謝謝。我會去nHibernate(請參閱原始問題中的更新)。 只是稍微放一邊「我真的不想爲那些......的公司工作」。有時候你沒有選擇,特別是當經濟不景氣時,你有4口食物。 – RonJ 2010-06-01 17:10:35

+1

同意。但我發現,憑藉經驗支持的辯護意見讓我在這方面擁有更多的自由,這比我在整個職業生涯中追逐單一供應商的工具(我爲MS工作了7年;我認爲自己是有見地的 - 但-agnostic)。如果您所處的地區選擇合理且合理,您仍然可以選擇。 – JasonTrue 2010-06-01 17:21:57

+0

+1 ..啊,當你在寫一篇文章的時候出去的時候會發生這種情況(猜測我們在同一頁上,查看我的過於冗長的版本)。不能同意更多。查看我的帖子,查看這裏提到的一些技巧和想法的鏈接,並進一步閱讀。 – Abel 2010-06-01 17:27:40

2

EntityFramework是Microsoft作爲他們提議的數據庫技術展示的內容。它包含了很多Linq-to-Sql的功能。我將從ADO.NET開始。你也會遇到很多ADO.NET。

贊同評論說Linq-to-sql也不再是先進的。

http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx#ado.netenfrmovw_topic2

+0

+1。另外值得一提的是,似乎Linq-to-SQL在下一個版本中不會推進,只會向後兼容。 EntityFramework將在.NET 4.0中推進,並可能在下一個版本中推進。 – brickner 2010-06-01 16:50:44

4

而不是挑選你認爲你可能被錄用的東西,專注於EF(也許)爲解決ORM問題作爲一個整體的一個具體的例子。儘管傾斜EF,你的未來僱主可能是nHibernate的房子,或者擁有自己的本土解決方案。學習EF,但使用該經驗來了解ORM的來龍去脈。

+0

啊,是的,我一定會喜歡能夠傳遞體驗的東西。謝謝。 – RonJ 2010-06-01 16:52:30

1

如果你想探索實體框架,Julie Lerman的this series of Pluralsight videos演示了許多你需要的基礎知識。正如凱文提到的,微軟不太重視LINQ到SQL以及更多LINQ到EF。

+0

這是非常有用的信息:如果MS在LINQ-to-SQL上花費的時間更少,那麼我幾乎不會花時間。 – RonJ 2010-06-01 16:54:42

+0

我只是看了看影片,但示例使用VS 2010年我會尋找使用VS 2008 – RonJ 2010-06-01 16:59:30

+0

@RonJ視頻 - 是的,他們使用的是.NET 4.0的所有。最新的 。NET版本爲實體框架提供了一些急需的支持(有些人會說「牙齒」)。 – SethO 2010-06-01 19:49:36

1

NHibernate的有繼承映射更大的靈活性,與存儲的特效/數據庫函數/自定義SQL /觸發器式屬性的支持,它只是一個更成熟的平臺比EF 4.

+0

我可以將nHibernate知識傳遞給EF嗎?或者他們甚至沒有接近? – RonJ 2010-06-01 16:58:31

+0

是的,您可以將您的NHibernate知識轉移到幾乎任何其他框架。這是因爲NH非常靈活,可以教會你許多解決ORM問題和情況的方法。我發現,在向後輩教授NHibernate時,他們開始以比以前更好的方式使用其他ORM。 – Abel 2010-06-01 17:33:08

1

(抱歉提前長期職位,但我決定嘗試給一點背景的兩個主要框架)

我想補充一點,使用非微軟技術有創建更大範圍的問題鳥瞰圖的優勢,並防止您將自己鎖定到.NET + Entity + SQL Server週期(即使Entity與數據庫無關)。

你可能會考慮NHibernate的。它可以說是目前最成熟的開源ORM框架之一。它速度快,被大型和大型企業所使用。還有最大的弱點:NHibernate被認爲具有相當陡峭的學習曲線。如果你走這條道路,我可以推薦由Manning出版的優秀書籍「NHibernate In Action」。

很多的NHibernate的弱點都被帶走從兩個方面:best practice ORM企業已在S#arp architecturedownloads at Github now)已經實施,其中也包括全自動映射from database to MVC architecture。 S#arp架構讓複雜的NHibernate場景變得輕而易舉(但仍然有着陡峭的學習曲線)。

另一方面是通過Fluent NHibernate易於配置的一部分,它創建了一個情況「維護一個點」:只是編寫C#中的實體對象,調用Config,如果它不存在數據庫中創建。爲你節省很多時間。 Fluent確實使用NHibernate,因爲它一直應該(事實上,因爲EF本來可以)。

需要注意的是,除非它最近改了,那實體框架需要存儲過程對數據庫的修改,這就是爲什麼我個人很少應用它。此外,除非您自己增加很多努力,否則EF在企業中的規模不會太大。當你擁有一個現有的數據庫時,NHibernate會發光,對於大型企業需要它,或者不想改變你已經創建的(包括觸發器,SP的限制)。

從學習的角度來看:正如其他人所說,學習EF是一個良好的開端,這是相當簡單,有豐富的文檔。由於易用性,小型組織更可能使用EF。中型公司和大公司更有可能去NHibernate(和可比較的企業頭腦地圖系統)。 EF相當新穎,NHibernate歷史悠久。兩者都有其優點。這兩個工作與LINQ很好。兩人都非常善於理解,在你的簡歷中找到一席之地。