0
比方說,我有以下的代碼位(我知道可能是容易修改,以更好的表現,但它說明了什麼我想要做的)操縱實體框架,以消除往返數據庫
List<Query> l = new List<Query>;
// Query is a class that doesn't exist, it represents an EF operation
foreach (var x in Xs)
{
Query o = { context.someEntity.Where(s=>s.Id==x.Id).First();}
// It wouldn't execute it, this is pseudo code for delegate/anonymous function
l.Add(o)
}
然後將查詢列表發送給EF,並對其進行優化,使其儘可能減少往返次數。我們稱之爲BatchOptimizeAndRun;你會說
var results = BatchOptimizeAndRun(l);
而且知道它從架構知道它會在整個查詢降低到最佳版本並執行,並把所讀取的結果在數組中。
我希望我已經描述了我正在尋找的東西,更重要的是它存在。 如果我聽起來像一個瘋狂的瘋子,讓我們假裝這個問題從來沒有存在過。
我的建議是不要試圖彎曲EF的意願。在可能的地方利用它,在無法避開的地方繞過它。很多時候,當人們這樣做時,他們最終會遇到一堆難以維護的代碼,並且他們可能會在更短的時間內使用直接ado.net創建一些動態的參數化查詢。如果EF中有一個功能直接解決這個問題,那麼你應該明顯地使用它,但除此之外,我會說做一個不同的方式。 –