簡體   English   中英

使用C#+ Entity Framework +存儲過程構造動態查詢

[英]Constructing dynamic queries with c# + Entity Framework + Stored procedure

我正在開發一項功能,用戶可以選擇多個參數,每個參數中都包含多個值。 我試圖找出一種使用C#在實體應用程序中設計此功能的方法,該實體框架將實體映射到存儲過程。 由於安全原因,我的應用程序必須通過僅具有存儲過程的代理數據庫訪問數據庫。 因此,我的實體被映射到存儲過程以進行插入,更新和選擇。 最終,我需要將用戶選擇的過濾器傳遞給存儲過程以查詢數據庫。 我想到的解決方案之一是將所有數據檢索到我的業務層,並使用linq進一步過濾。 但這是不理想的,因為在內存評估器中比在數據庫中過濾的數據量更大,數據庫更適合於執行這種復雜的查詢。 我已經看到了使用linq構建動態查詢的帖子,但是在這類帖子中,實體映射到了表,這使得操作起來更加容易。 在這里的任何幫助將不勝感激。 謝謝你,sirkal

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

對於SQL sproc,您還可以在其中解決所有可能更改過濾器的項目,並讓SQL動態處理數據以生成結果集,從而解決該問題。

選擇哪個? 這實際上取決於您團隊中的核心能力。 我之所以喜歡C#代碼,主要是因為熟悉(花數年時間從事sproc,但是動態sproc可能會帶來麻煩)。

現在,您要警惕的一件事是結束於服務器無法輕松調整的動態查詢(例如SQL Server中的統計信息,盡管其他RDBMS使用類似的概念)。 例如,我在LINQ to SQL上看到的一個問題是動態查詢,該查詢導致SQL的執行不達最佳狀態,需要DBA的大量支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM