1

我有,我會使用一個倉庫模式,並與返回的IQueryable延遲加載GETALL方法拉動從數據庫對象的情況。不過,我還需要構建將包含在惰性加載對象(查詢)中的動態對象。IQueryable的和混合延遲加載和預先加載

是否有可能內置對象添加到延遲加載的IQueryable,仍然保持了延遲加載的好處?例如

public override IQueryable<Foo> GetAll() 
{ 
    return _entities; // lazy loaded 
} 

public override IQueryable<Foo> GetAllPlusDynamic() 
{ 
    var entities = GetAll(); 
    foreach(var d in GetAllDynamic()) 
    { 
     entities.Add(d); // eagerly loaded 
    } 
    return entities; 
} 
+0

老實說,我不明白你的問題。什麼是那些「急切加載」的「動態對象」?你的意思是某種'Include'表情,像在'包括(客戶=> customer.Orders)',左右?你能舉一些具體的例子嗎? – Slauma

+0

@Slauma我的理解是,Op想要* GetAllPlusDynamic *來查詢數據庫集合*加上其他一些集合... – McGarnagle

+0

是的,基本上查詢數據庫中的一組對象,然後查詢另一個數據源(在這種情況下是服務)並構建一組對象。 –

回答

1

我不確定我是否正確,但關於你的評論理解你...

是的,基本上在數據庫中查詢一組對象,然後查詢 另一個數據源(在這種情況下是一項服務)並構建一組 對象。

...我會說,這是不可能的。

與實體框架(LINQ to Entities)一起使用的IQueryable<T>類型的對象基本上是底層數據存儲可以執行的查詢的描述,通常是一個抽象描述(表達式樹),它將被轉換爲SQL。

這樣的查詢描述的每個部分 - where表達式,select表達式,Any(...)表達式等 - 必須可以轉換爲數據存儲的本機語言(SQL)。特別是不可能在數據庫無法理解和執行的表達式中包含某些方法調用 - 如服務調用。

IQueryable<T>知道潛在的「提供者」。這提供者負責由IQueryable<T>對象表達式樹抱翻譯成「東西」,通過SQL Server或由MySQL或Oracle使用的SQL方言使用例如T-SQL。我相信可以編寫自己的提供程序,然後可以以某種方式執行服務調用和數據庫查詢。但我也相信這不是一件容易的事。

使用Entity Framework的標準SQL提供程序,您必須執行數據庫查詢並逐個調用服務:在內存中運行查詢和實體化實體 - 然後對每個實體的結果集合運行服務調用。