2011-09-28 191 views
2

我習慣於在數據訪問方面爲我的項目使用數據集。我現在爲自己設置一個簡單的應用程序來學習實體數據框架以及如何檢索操作數據。實體數據框架 - 101

我在互聯網上找到的所有教程和示例都對我來說太過先進。

任何人都可以指導我從哪裏開始,這個模型的優點是什麼,在什麼情況下我應該選擇使用實體框架,以及在開始之前我應該​​使用哪些事物(基礎)。

我的數據組工作正常。我有沒有理由不堅持這種訪問數據的方式?或者這是根據網站的用戶需要考慮的事情(用於速度等)

任何信息 - 指導將不勝感激。

預先感謝您..

+1

這個問題太廣泛了。爲了貫穿你的全部觀點,人們可以撰寫小論文。 –

回答

1

你問(「當我應該使用ORM,而不是數據集/硬編碼SQL?」)是有點過於寬泛,可以在Q充分解決的問題&一個網站。但是,這裏有一對夫婦的高點:

  • ORM的提供安全性,因爲它們產生在你的數據庫中的表類(或周圍的其他方法,你應該選擇走這條路),你執行你的這些類的代碼交互,而不是將字段和表名嵌入到代碼中。這爲您提供了編譯時安全性,確保您不會發現其中的一個,並在部署後六個月內發現它隱藏在應用程序的隱藏深處。
  • ORM的規定獲取相關實體(我可以做這樣的事情「customer.Orders」或代碼「order.Customer」),而不是要麼嵌入SQL字符串中或通過訪問所有存儲過程的更自然的方式

和幾個缺點

  • 在所有,但最簡單的操作,ORM生成SQL很可能是比手工製作的SQL或存儲過程較慢。爲了安全和方便,您使用ORM,而不是速度。
  • 使用懶惰加載(相關實體按需加載而不是預先加載)等功能很容易,並且在未意識到的情況下會產生性能損失。
  • 爲了充分利用ORM(意義關係並在整個更新,刪除和插入過程中使用它),通常必須將整個對象帶回到內存中,而不僅僅是一部分。
+0

我認爲你對ORM的判斷過於苛刻。有一個重要的學習曲線,但如果開發人員知道他們在做什麼,一個好的ORM並不真的存在這些問題。當然任何技術都可能以不好的方式使用,特別是如果開發人員懶惰。我認爲ORM有缺點,但不是你列出的。 –

+0

@MichaelMaddox:除了最簡單的操作之外,ORM生成的SQL幾乎普遍比手工製作的SQL慢。例如,急切的加載通常是(如果不是總是)通過創建所有涉及表的笛卡爾積來完成的,然後在客戶端將其捲起來。這可能會導致*巨大*結果集充滿了從服務器返回的重複數據。另外,我不瞭解任何可以在內存中沒有相應對象的情況下執行DML的ORM,儘管有一些(不直觀的)方式來解決這個問題(比如「僞造」一個對象並將它附加到ORM的上下文中)。 –

+0

我非常贊成ORM。我在我的項目中使用了EF4,並沒有任何其他方式,但它們並不代表某些人認爲他們所做的那種頭腦清晰的選擇。它們與其他任何東西都有優點和缺點,只是查詢速度的差異通常不如生產力和開發時間的增加重要。 –

1

我同意亞當·羅賓遜提出的所有問題,但我會然而,此舉增加,到ORM(在我的情況EF4.0)是所有關於開發人員的生產力。以前,我做了所有手工編碼的類和數據訪問方法,併爲所有數據訪問精心設計了存儲過程 - 坦率地說,性能無法勝任任何事情 - 但所有手工編碼都需要大量時間。

我會保守地估計,我將大部分開發工作都削減了一半,而使用EF4.0而不是我的舊方法,而我的用戶並沒有注意到任何明顯的減速。在少數需要額外性能的情況下,我仍然可以手工編寫一些數據訪問和/或存儲過程,以便在需要時獲得額外的性能。

所以,在回答你的問題時,你的做事方式沒有什麼「錯誤」,但是你應該通過學習ORM的整個過程,然後看看他們是否優於你。

0

ORMs(任何ORM)的學習曲線很重要。不要讓過程開始時簡單的代碼生成欺騙你。

如果有人知道ORM和數據集,我認爲他們會選擇ORM 99%的時間,優點是非常有吸引力。 ORM並不完美,但幾乎在每種情況下都比數據集更好。也就是說,如果數據集正在爲你工作,並且ORMs的學習曲線正在困擾着你,那麼堅持使用數據集是完全可以的。我會鼓勵你繼續打開ORM的學習曲線,即使需要花費數年的時間來開展和關閉研究(也可能)。