Оптимизация запроса NHibernate - PullRequest
0 голосов
/ 25 ноября 2010

У меня есть следующий фрагмент кода, который (очевидно) доставляет мне ОГРОМНЫЕ проблемы с производительностью, и я обращаюсь за советом, как его улучшить.Идея в том, что для каждого базового элемента в списке я смотрю, есть ли хотя бы один производный элемент, и если нет, я создаю его.Проблема в том, что для каждого базового элемента есть отдельный запрос к базе данных:

var derivedItems = from item in baseItems select item.GetDerivedItem(session);

, где

public virtual DerivedListItem GetDerivedItem(ISession session)
{
    var items = session.Query<DerivedItem>()
                       .Where(item => item.BaseItem == this);
    if (items.Any())
        return items.First();
    var newItem = new DerivedItem(this);
    session.Save(newItem);
    return newItem;
}

Как бы вы улучшили этот вид кода?

1 Ответ

0 голосов
/ 25 ноября 2010

Если вы используете Критерии, вы можете добавить псевдоним к критериям, чтобы предварительно выбрать объединения для вашего запроса.

Это будет выглядеть примерно так:

DetachedCriteria.For(GetType(MyQueriedType)).CreateAlias("DerivedItem", "d", SqlCommand.JoinType.LeftOuterJoin)

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


На самом деле, если вы не хотите прекращать использовать linq для nhibernate, я бы порекомендовал поискать соединения для linqв спящий режим.Возможно этот пост может помочь

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