也許還有其他的東西? 我已經在使用nHibernate,但偶爾會遇到一個懶惰的初始化代理對象實際上不會初始化的問題。我正在考慮嘗試其他的東西。該網站擁有用戶帳戶,用戶帖子和照片,並將這些內容過濾爲特定位置名稱和標題/說明匹配。更不用說投票,評級和標記作爲最愛。所有這些都會導致不同數量的數據庫負載。你會選擇什麼ASP.NET Web應用程序; nHibernate,Linq或SubSonic
回答
我喜歡SubSonic,因爲它很容易配置和生成DAL。這個實現不是一個完整的ORM,因爲它只爲每個表創建一個類。能夠使用存儲過程可以補償何時需要編寫作爲連接結果的對象。同樣,SubSonic旨在實現功能性,因此它可以幫助您快速實現項目目標。
也就是說,您無法使用SubSonic來「編寫對象」 - 沒有描述類之間關係的配置文件。數據庫仍然決定你如何塑造你的解決方案。
我們在一個相當活躍的站點上使用ADO.NET實體框架(每天10,000次訪問)。這對我們來說是堅實的。缺乏延遲加載很煩人,但它會讓你考慮去數據庫。
LINQ是一個不錯的選擇。它在Stackoverflow中使用,在我目前的項目中,我們使用LINQ來訪問數據。
SubSonic目前用於我們所有的webform應用程序,並取得了巨大成功。在幾分鐘內,整個數據庫就可以從頭開始生成,隨時準備在您的應用程序中使用。 SubSonic創作者Rob Conery提供了一些精彩的網絡廣播,詳細介紹了在Web應用程序中設置SubSonic位的過程以及一些很酷的演示,以幫助您開始。檢查出SubSonic Project。
我一直在使用LLBLGen Pro作爲我的ORM大約一年,它的工作得很好。雖然我沒有使用SubSonic,但我被告知它們是相似的。從頭開始,它可以從數據庫創建一個數據訪問層,並且只需幾分鐘即可使用。有一個輕微的學習曲線,至少對我來說是這樣,但幫助文件提供了足夠的信息來幫助你完成幾乎任何你遇到的問題。該應用程序可以按照沒有問題安裝的方式使用,但也支持大量定製(可能太多?)。
LLBLGen臨巖!延遲加載,預取路徑(以最少的查詢獲取整個圖),支持無限的嵌套謂詞,連接等。另外,擴展生成的代碼非常容易;自助服務模式使用繼承策略來允許擴展而不中斷生成。 – 2008-10-16 05:16:34
Hibernate for Java項目,但毫無疑問,LINQ for .Net。爲什麼在內置LINQ時添加外部依賴關係?
我也會去LINQ,但我必須承認LINQ to SQL有分層問題。我已經閱讀了很多關於LINQ to SQL的文章,並且他們都建議它基本上是爲RAD應用程序創建的。
如果你的數據庫中的繼承模型與Linq的非常有限的繼承支持一起工作,那麼我說去Linq。如果你需要更復雜的繼承場景,那麼我會說,你應該堅持使用NHibernate,並努力解決你遇到的任何痛苦。
如果您對懶惰的初始化代理有特定的麻煩,爲什麼你沒有這樣做呢?或只有懶裝袋。我認爲這是值得一試,然後重寫你的應用程序的框架沒有延遲加載。
另一個選項是Castle ActiveRecord。它在NHibernate的基礎上實現了Active Record design pattern,同時也消除了大部分配置的痛苦(比如它的「isWeb」設置)和映射。
我在微軟生態系統的經驗:
我使用LINQ2SQL上幾個項目,我已經運行到該azamsharp提到的「分層」的問題。
不是說如果你將POCO發送回你的邏輯或UI層,它會有很大的幫助,但是Repository模式的實現對這個令人討厭的分層和關注問題的分離有點幫助。
對於使用像投票或統計數據(基本上任何域對象需要顯示或不同操作上比它在數據庫的代表)的ADO.Net實體框架爲您提供了一定的優勢複雜的語義什麼。它可以通過包含複雜的數據檢索來簡化您的業務邏輯/數據訪問層。
ADO.Net Entity Framework Overview
希望幫助!
我會使用NHibernate。持久性無知是我的主要銷售字體之一,而不是綁定到數據庫是另一個。實體框架有着深刻的缺陷,不僅僅是缺乏延遲加載。 EF和LINQ2SQL都是新技術,而NHibernate非常成熟並且看到了更多的操作。
NHibernate的另一個好處是無需編輯您的數據就可以切換數據庫。我將它用於本地運行的集成測試,running them against SQLite and then SQL Server on the CI server。
我不太在乎SubSonic。對我來說,它似乎是一個非常薄的DAL工具。使用SubSonic,我仍然輸入了很多字符串文字,這似乎有點讓我失望。就個人而言,我更喜歡LLBLGEN:
http://www.llblgen.com/defaultgeneric.aspx
弗蘭斯鮑馬,創作者,有一個非常好的博客,討論圍繞DAL和ORM技術的許多問題。
- 1. 你今天會選擇什麼樣的數據層,Linq或Subsonic?
- 2. 你會選擇在你的應用程序中使用什麼導航控件?
- 3. 什麼實時框架,你會選擇一個高流量的Web應用程序,爲什麼?
- 4. 你會爲後端Web應用程序做什麼:Flex,GWT,JQuery?
- 5. 你用什麼來部署你的Web應用程序?
- 6. ASP.NET Health Monitoring或ELMAH要選擇什麼?
- 7. 你用什麼工具來調試你的asp.net應用程序?
- 8. 你會選擇一個新的Facebook應用程序的PHP框架,爲什麼?
- 9. asp.net mvc應用程序和asp.net web應用程序有什麼區別
- 10. 您使用什麼工具在Asp.net或Asp.net mvc中設計Web應用程序?
- 11. SQL Server數據庫或XML,爲asp.net應用程序選擇什麼?
- 12. Web應用程序NHibernate會話管理NHibernate風格的夏天
- 13. asp.net web應用程序
- 14. 你會選擇在Java應用程序中運行HTML/Javascript
- 15. 如果你必須選擇一個免費的CMS來與ASP.NET MVC集成,你會選擇什麼?
- 16. ASP.NET Web應用程序會話問題
- 17. ASP.NET MVC Web應用程序VS ASP.NET Web應用程序
- 18. 什麼東西你想監視一個web應用程序
- 19. ASP.NET。網站或Web應用程序?
- 20. NHibernate與非Web應用程序的StructureMap
- 21. 你能解釋一下Struts2 web應用程序會發生什麼嗎?
- 22. 如何從asp.net web應用程序中選擇文件夾或文件?
- 23. ASP.Net Web應用程序選擇客戶端目錄
- 24. ASP.NET web應用程序
- 25. 什麼樣的應用程序類型/情況你會使用memcache或數據存儲在一個去應用程序引擎web應用程序的websessions?
- 26. 你會選擇什麼 - XPage或舊式表單風格的開發?
- 27. 這兩個項目,ASP.NET MVC2 Web應用程序和ASP.NET MVC2空Web應用程序有什麼區別?
- 28. ASP.NET Web應用程序中常量的一些示例或用法是什麼?
- 29. 我應該創建一個空的Web應用程序或Web API Web應用程序模板嗎? - VB.net
- 30. Session在Web應用程序/ ASP.Net中的用途是什麼?
我真的鼓勵試圖發現爲什麼你間歇的延遲加載問題與NHibernate。這在正常情況下不會發生。 – 2008-10-09 20:39:26
這可能是由於沒有使用最新版本,因爲我們在NHibernate上構建的訪問層最常用的方法不再受支持。看重寫它可能與選擇新解決方案一樣困難。 – dlamblin 2008-10-21 01:19:24