2
我正在寫一個EF支持的存儲庫,它有一個與每個實體類型關聯的包的概念,包括它的常用子對象。例如,我有一個看起來像這樣如何構建一個允許我通過params傳入多個包含EF的函數?
private static IQueryable<Foo> GetFooPackage(Entities context)
{
return context.Foo
.Include(target => target.Bar)
.Include(target => target.FooBar)
}
這是所以當我跑我的「get」方法的功能,有返回數據的一致分組。但是,我希望能夠在個案的基礎上進一步擴展。我想能夠做些類似於
public static Foo GetFoo(int fooId, params Expression<Func<Foo, T>>[] extraIncludes)
{
using (Entities context = GetContext(null))
{
IQueryable<Foo> package = GetFooPackage(context);
extraIncludes.ToList().ForEach(expression => package.Include(expression));
return package.FirstOrDefault(target => target.FooId == fooId);
}
}
什麼讓我掛在嘴邊是T部分。我知道這個例子沒有正確引用T泛型。這只是一個例子的佔位符。我不確定如何塑造,以便我可以做我想做的事。最終,儘可能保持EF生成的SQL儘可能小而精簡。你會建議什麼?它被用在一個斷開連接的服務中,所以我不能依賴延遲加載來簡單地獲取更多數據(如果它丟失了)。一旦我獲得了數據,我就需要一次性完成,而再次獲取數據確實不切合實際。
謝謝!
這似乎是你的代碼過於複雜,以使其動態。你爲什麼不爲剛纔返回的每個唯一數據集創建一個單獨的方法?然後在需要時調用這些方法? –
答案很明顯,我在這裏找到它:http://stackoverflow.com/questions/26619532/how-to-include-2-navigational-properties-in-ef?rq=1 – Bigsby
@CarlProthman我不知道每當出現不同的需求時,都不想制定新的方法。我喜歡儘可能使用框架功能。目的很明確,目標很簡潔,所以我不認爲這是一個問題,因爲我沒有試圖制定一個上帝的方法。我更有趣,有點尷尬,我沒有想到「對象」是答案。 Oi ... – Bigsby