2012-02-10 81 views
1

我正在研究一項功能,其中用戶可以在每個參數中選擇多個參數並使用多個值。我試圖找出一種方法來在我的應用程序中使用C#實現這個功能,實體框架將實體映射到存儲過程。由於安全原因,我的應用程序必須通過只有存儲過程的代理數據庫訪問數據庫。因此,我的實體被映射到存儲過程以進行插入,更新和選擇。 最終,我需要將用戶選擇的過濾器傳遞給查詢數據庫的存儲過程。我想到的解決方案之一是將所有數據檢索到我的業務層,並使用linq進一步過濾。但是這並不理想,因爲在內存評價者中被過濾的數據量比在更適合做這種複雜查詢的數據庫中要大。 我已經看到過使用linq構建動態查詢的帖子,但是在這些帖子中,實體被映射到表格,這使得它更容易。 在這裏的任何幫助將不勝感激。 謝謝, sirkal使用c#+ Entity Framework構建動態查詢+存儲過程

回答

0

EF(和LINQ爲此事)使用延遲執行。您可以使用IQueryable(Google搜索時間?)並在您構建的對象中創建過濾條件(您可以在沒有對象的情況下執行此操作,但認爲可重用),從而輕鬆創建動態查詢。

至於SQL sproc,還可以通過傳入所有可能更改過濾器的項目並讓SQL動態地對數據進行操作來生成結果集來解決它。

要選擇哪個?這實際上取決於你的團隊核心能力在哪裏。我更喜歡C#代碼,主要是因爲熟悉度(花費數年時間做sprocs,但動態sprocs可能是一個皇家痛苦)。

現在,你需要警惕的一件事是結束於服務器無法輕易調整的動態查詢(如SQL Server中的統計信息,儘管其他RDBMS使用相似的概念)。例如,我看到的一個與LINQ to SQL有關的問題是動態查詢,導致SQL執行得不夠理想,需要大量的DBA手持式操作。

相關問題