Я знаю о методе, обсуждаемом здесь:
Решение типичных проблем с помощью скомпилированных запросов от Linq до Sql для веб-сайтов ASP.NET с высоким спросом
... но это не работает для моей ситуации, так как я получаю:
«Настройка параметров загрузки запрещена после того, как результаты возвращены из запроса.»
Я использую сценарии Codesmith PLINQO для генерации сущностей и кода менеджера, а код менеджера выглядит примерно так:
public partial class SearchManager
{
#region Query
// A private class for lazy loading static compiled queries.
private static partial class Query
{
internal static readonly Func<MyDataContext,IOrderedQueryable<Search>>
GetAll = CompiledQuery.Compile(
(MyDataContext db) =>
from s in db.Search
orderby s.Name
select s);
}
#endregion
public IQueryable<Search> GetAll()
{
return Query.GetAll(Context);
}
}
Сначала я попытался добавить статические DataLoadOptions в класс Searchmanager, например:
public static readonly DataLoadOptions MyOptions =
(new Func<DataLoadOptions>(() =>
{
var option = new DataLoadOptions();
option.LoadWith<Search>(x => x.Rule);
return option;
}))();
... затем предоставляя его в контекст в методе GetAll, например:
public IQueryable<Search> GetAll()
{
Context.LoadOptions = MyOptions;
return Query.GetAll(Context);
}
... и это дало мне ошибку, которую я заметил выше. Это потому, что запрос уже скомпилирован, и поэтому не может быть добавлено «лишних» DataLoadOptions? Если это так, как можно применить DataLoadOptions до того, как запрос будет скомпилирован?