16 февр. 2009 г.

Сокращение количества запросов к базе в LINQ

Проблема

Допустим у Вас есть объект LINQ, сопоставленный какой-то таблице, например Site и есть свойства этого объекта, хранящиеся в другой таблице, которые представлены свойством InterfaceSetting.

Вы выбираете сам объект, например так:

var q = from site in DB.Sites

        where site.id == (Guid)Session["SiteID"]
       select site;

CurrentSite = q.Single();
Потом Вы обращаетесь к свойству CurrentSite.InterfaceSettings, при этом LINQ делает еще один запрос в базу, чтобы вытянуть связынный объект.

Путь решения проблемы

Если по логике приложения эта связь используется часто, то логично было бы сразу запрашивать связанный объект в одном запросе с основным. Это можно сделать при помощи LoadOptions объекта DataContext, например так: partial class DBDataContext
{
   partial void OnCreated()
   {
       var load_options = new DataLoadOptions();

       // Настройки интерфейса всегда загружаем сразу вместе с сайтом, одним запросом к базе
       load_options.LoadWith<Site>(site => site.InterfaceSetting);

       LoadOptions = load_options;
   }
}

Комментариев нет:

Отправить комментарий