Используя Linq к SQL, как делают меня Нетерпеливая Загрузка весь дочерний элемент и какие-либо вложенные дочерние результаты

Предположение при интернет-соединении было бы доступностью сети, в NetworkInterface.GetIsNetworkAvailable(). События на NetworkChange могут сказать Вам, когда это изменяется. Оба класса находятся в System.Net.NetworkInformation пространство имен.

, Конечно, Вы не будете знать, действительно доступен ли Интернет, пока Вы не пытаетесь соединиться с чем-то.

5
задан Breadtruck 28 July 2009 в 00:20
поделиться

2 ответа

Linq to SQL имеет некоторые ограничения в отношении активной загрузки.

Таким образом, нетерпеливая загрузка в Linq To SQL - это только жадная загрузка для одного уровня за раз. Как и для ленивой загрузки, с Load Варианты мы все равно выдадим один запрос на строку (или объект) на корневом уровне и это то, чего мы действительно хотим чтобы избежать экономии базы данных. Который это своего рода точка с нетерпением загрузка, чтобы сохранить базу данных. В способ, которым LINQ to SQL отправляет запросы для иерархия уменьшит производительность по log (n), где n - количество корневых объектов. Вызов ToList не изменит поведения, но будет контролировать, когда вовремя все запросы будет добавлено в базу данных.

Подробнее см .:

http://www.cnblogs.com/cw_volcano/archive/2012/07/31/2616729.html

5
ответ дан 14 December 2019 в 19:21
поделиться

Я уверен, что это можно было бы сделать лучше, но мой код работал с минимальным количеством запросов. По одному на уровень. Очевидно, что загрузка с использованием L2S не вызывает особого энтузиазма, но если кто-то знает правильный способ, я хотел бы знать для справок в будущем.

    var query =
    from g in cdc.Global
    where g.active == true && g.globalId == 41
    select g;

    var globalList = query.ToList();

    List<Category> categoryList = g.category.ToList<Category>();

    var categoryIds = from c in cdc.Category
                where c.globalId == g.globalId
                select c.categoryId;

    var types = from t in cdc.ItemTypes
                where categoryIds.Any(i => i == t.categoryId)
                select t;

    List<ItemType> TypeList = types.ToList<ItemType>();

    var items = from i in cdc.Items
                from d in cdc.ItemData
                where i.ItemId == d.ItemId && d.labelId == 1
                where types.Any(i => i == r.ItemTypes)
                select new 
                    {
                        i.Id, 
                        // A Bunch of more fields shortened for berevity
                        d.Data    
                    };

    var ItemList = items.ToList();

    // Keep on going down the hierarchy if you need more child results
    // Do your processing psuedocode
    for each item in list
        filter child list
        for each item in child list
            .....
    // 

Не возражал бы узнать, как все это сделать, используя универсальные шаблоны и рекурсивный метод с учетом таблицы верхнего уровня.

0
ответ дан 14 December 2019 в 19:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: