我正在將舊的應用程序從WebForms移植到MVC,並且該過程的一部分正在拆除現有數據層,將邏輯從存儲過程移至代碼。正如我最初只使用基本的C#SQL函數(System.Data.SqlClient)一樣,我使用了輕量級的僞ORM(PetaPoco),它只是將SQL語句作爲字符串執行並執行。構建動態查詢在SQL中的工作原理與許多條件相同,即添加和刪除附加代碼(平均查詢約有30個過濾器)。動態查詢的最佳選擇?
所以環顧了一下後,我發現了一些選擇:
- 一串字符串和在需要時添加查詢的條件語句位的。真的很討厭,特別是當查詢變得複雜時,而不是我想追求更好的解決方案。
- A bunch of conditionals using L2E。看起來更優雅,但我測試過的L2E太臃腫,一般來說是一次糟糕的經歷。我可以在L2S中做同樣的事嗎?如果是這樣,L2S是否會在未來5 - 10年內堅持下去?
- 使用PredicateBuilder。仍在研究這個,關於L2S的相同問題。編輯:我也可以堅持現有的存儲過程模型,但我不得不重寫它們,所以它不會傷害到其他選項,因爲我仍然要做腿部工作。
有沒有其他的選擇嗎?任何人都可以在任何提及的方法上體驗一些經驗 - 主要是,您選擇的方法是否讓您想要構建一個時間機器並殺死您,以便實施它?
只是我的兩分錢,當EF4出來時我真的很興奮。現在用它在過去的一年後,我一直在與膨脹時,在某些建模方案的複雜性,以及所產生的SQL真不爽。我永遠不會再使用EF--一直以來都是使用一個精簡API的存儲過程。不回答你的問題 - 但認爲ID增加了我的兩分錢。 – RPM1984 2011-06-01 00:15:47
由於淨3.5的,流行的觀點認爲L2S產生更有效的SQL比L2E。我不知道L2E的更新(包括和更高版本.net 4.0)是否已經發生了變化。在L2S中測試相同的條件應該相當簡單。 **你有沒有考慮過只保留當前的存儲過程?** – jlnorsworthy 2011-06-01 00:17:09
@jlnorsworthy - 這當然是一種選擇,我應該在上面添加它(我將編輯它)。重要的一點是,無論我選擇什麼方案,都需要重寫(它們非常複雜,而且速度很慢),所以現在是貨比三家瞭解替代品的好時機。 – tennesseepusher 2011-06-01 00:25:07