Простые Eager / Lazy примеры загрузки в linq2sql - PullRequest
6 голосов
/ 23 октября 2011

У кого-нибудь есть простой пример кода в linq2sql, который демонстрирует разницу между быстрой загрузкой и отложенной загрузкой?

1 Ответ

9 голосов
/ 23 октября 2011
  • Отложенная загрузка: для данного объекта, связанные с ним коллекции могут быть пустыми при первой загрузке, но при первом повторении этих коллекций LINQ to SQL запускает запросчтобы загрузить эти коллекции после загрузки, коллекция становится доступной для использования в будущем, не требуя другого запроса:

    var query = from o in db.GetTable<Order>() //db is the datacontext
            select o;
    foreach(Order o in query)
    {
        foreach(OrderDetail d in o.OrderDetails)//Deferred loading
        {
           //Do something on these collections
        }
    }
    

OrderDetails загружаются, только если они повторяются, поэтому еслиOrderDetatils никогда не повторяется, соответствующий запрос никогда не выполняется.

  • Стремительная загрузка: немедленная загрузка связанных коллекций для всех объектов, на которые ссылаются, например LINQ to SQL будетавтоматически приносит все OrderDetails для всех полученных заказов

    DataLoadOptions op = new DataLoadOptions();
    op.LoadWith<Order>(o => o.OrderDetails);
    db.LoadOptions = op;
    var query = from o in db.GetTable<Order>() 
             select o;
    foreach(Order o in query)
    { 
        //Order details are eager loaded; additional queries are not needed
        foreach(OrderDetail d in o.OrderDetails)
        {
           //do something
        }
    }
    

обратите внимание, что: Отложенное выполнение - это функция LINQ , но Отложенная загрузка - этоФункция LINQ to SQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...