我目前正在研究中型Web應用程序的原型,並且我認爲這也很適合實驗實體框架。問題在於應用程序的主要部分不是數據層和邏輯,所以我沒有太多時間去玩Entity Framework。另一方面,數據庫模式非常簡單。使用ADO.NET實體框架編寫「查詢」的大拇指規則
我面臨的問題之一是我找不到一種「寫查詢」的一致方法。據我所知,有四個 「接口」 作業:
- LINQ到實體
- LINQ使用LINQ擴展方法
- 實體SQL
- 查詢生成器
好吧,前兩個基本上是一樣的,但只用一個維護和一致性是很好的。
我很困惑的事實,他們都沒有完成,最普遍。我經常發現自己陷入了困境,並且使用了其中幾個看起來醜陋的外觀組合。我的猜測是Entity SQL是最普遍的一種,但使用字符串編寫查詢感覺就像退後一步。我正在試驗類似Entity Framework的主要原因是我喜歡編譯時檢查。
其他一些隨筆/問題:
- 我也經常使用ObjectQuery.Include()方法,但同樣需要一個字符串。這是唯一的方法嗎?
- 何時使用ObjectQuery.Execute()(與ToList())?它是否真的執行查詢?
- 應儘快執行查詢(例如使用ToList()),還是應該不在乎讓第一枚枚舉的執行保持原樣?
- ObjectQuery.Skip()和ObjectQuery.Take()僅作爲擴展方法使用嗎?有沒有更好的方法來做分頁?這是2009年,幾乎每個Web應用程序都處理分頁。
總體來說,我理解實現一個ORM時有很多困難,常常一個人妥協。另一方面,直接訪問數據庫(例如ADO.NET)非常簡單明瞭,界面清晰(表格結果,數據讀取器),所以所有代碼 - 無論是誰寫的 - 都是一致的。每當編寫數據庫查詢時,我都不想面對太多的選擇。這太乏味了,很多不同的開發人員會想出不同的方法。
你的經驗法則是什麼?
「LINQ to Entities using LINQ extension methods」:你的意思是LINQ-to-Objects?由於LINQ-to-Entities使用擴展方法... – 2009-09-28 12:10:56
有趣的問題 - 我已經遇到類似的困惑,但這切入了問題的核心:應該如何使用Linq到實體?一致性很重要。 – 2009-09-28 12:13:35
@Yannick:我認爲這是事實,有很多不同的方式來做同樣的事情。當然,'BLA.Select(x => ... myProjection ...)'與BLA中的x select ... myProjection ...'相同,但是在代碼中使用這兩個不一致會使得可讀性降低。例如,如果您正在通過代碼進行搜索,如果執行相同操作的代碼看起來相同,則很方便。對很多(毫無意義的)變化都是不好的做法:你不增加功能,你只是陡峭的學習曲線,使代碼變得不可讀。 – 2009-09-28 12:17:02