Нетерпеливый загружающийся дочерний набор с NHibernate

.rc файлы не передаются в gcc, они должны обрабатываться windres (gcc эквивалент MS 'rc.exe), вы используете windres для создания .o файла из .rc и затем передаете его. o к gcc (или ld) как часть вашей последней стадии ссылки.

windres my_file.rc my_file.o
gcc -o my_final <other parameters> my_file.o

Есть и другие потенциальные аргументы для windres, посмотрите на man-страницу для деталей.

24
задан Ruben Bartelink 18 June 2015 в 09:37
поделиться

3 ответа

Чтобы ответить на ваш вопрос: да, это приводит к огромным наборам результатов.

Я предлагаю:

  • просто наивно писать свои запросы без страстного извлечения
  • В некоторых местах ставить страстное извлечение, но только по одному на запрос
  • если у вас действительно возникают проблемы с производительностью, которые вы не можете решить с помощью индексов или улучшенных запросов и стратегий отображения, используйте свое решение с несколькими запросами.
2
ответ дан 29 November 2019 в 00:28
поделиться

Хотя это может быть не совсем то, что вы ищете, я бы порекомендовал прочитать эту статью:

Жадная загрузка агрегата с множеством дочерних коллекций

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

0
ответ дан 29 November 2019 в 00:28
поделиться

Нашел решение, но оно не очень хорошее. Сначала я нахожу все идентификаторы счетов-фактур, затем использую их в мультизапросе, а затем, в конце, фильтрую результаты через HashedSet. Из-за большого количества элементов иногда я не мог использовать обычный Restriction.In и был вынужден отправлять его в виде строки.

Какие-либо предлагаемые настройки?

var criteria = Session.CreateInvoiceBaseCriteria(query, archived)
    .SetProjection(Projections.Id());

var invoiceIds = criteria.List<int>();
if (invoiceIds.Count > 0)
{
    var joinedIds = JoinIDs(criteria.List<int>()); // To many ids to send them as parameters.

    var sql1 = string.Format("from Invoice i inner join fetch i.States where i.InvoiceID in ({0}) order by i.{1} {2}", joinedIds, query.Order, query.OrderType.ToString());
    var sql2 = string.Format("from Invoice i inner join fetch i.AttestationRequests where i.InvoiceID in ({0})", joinedIds);
    var sql3 = string.Format("from Invoice i inner join fetch i.Attestations where i.InvoiceID in ({0})", joinedIds);

    var invoiceQuery = Session.CreateMultiQuery()
        .Add(sql1)
        .Add(sql2)
        .Add(sql3);

    var result = invoiceQuery.List()[0];

    return new UniqueFilter<Invoice>((ICollection)result);
}

return new List<Invoice>();
8
ответ дан 29 November 2019 в 00:28
поделиться
Другие вопросы по тегам:

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