簡體   English   中英

禁用LINQ上下文的所有延遲加載或強制執行緊急加載

[英]Disable all lazy loading or force eager loading for a LINQ context

我有一個文檔生成器,該文檔生成器目前包含約200個項目的查詢,但完成后可能會超過500個。 我最近注意到,某些映射表示延遲加載。 這給文檔生成器帶來了一個問題,因為它需要根據生成的文檔來訪問所有這些屬性。

雖然我知道可以為上下文指定的DataLoadOptions ,但這將導致我不得不顯式指定每個可能加載的列。 那是1000年以北的,因為所有數據獲取都在一個上下文中進行。

我有什么辦法可以禁用上下文的延遲加載或顯式啟用渴望加載以忽略延遲加載屬性? 也許擴展數據庫上下文類並覆蓋某些內容?

您將需要設置DeferredLoadingEnabled ,然后使用一些反射來包括每個屬性,例如:

DataLoadOptions dataLoadOptions = new DataLoadOptions();

foreach (PropertyInfo pi in typeof(SomeThingyClass).GetProperties())
{
    ParameterExpression paramExp = Expression.Parameter(typeof(SomeThingyClass), "s");
    Expression expr = Expression.Convert(Expression.Property(paramExp, pi.Name), typeof(object));
    LambdaExpression lambda = Expression.Lambda(expr, paramExp);
    dataLoadOptions.LoadWith((Expression<Func<SomeThingyClass, object>>) lambda);
}

這對於LINQ to SQL來說是棘手的。 簡短的答案是,這取決於。

如果您的實體的布局方式使您具有與之類似的關系:

Customers -> Orders -> OrderDetails

您需要評估所有3個實體的屬性才能做出決定,最好的選擇是編寫連接。 使用.LoadWith將使用單個語句獲取CustomersOrders ,但隨后還將對每個單個OrderDetails記錄發出查詢。

因此,即使您確實使用LoadWith指定了每個子關系,也不會發出單個查詢來檢索結果。

暫無
暫無

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

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