Многотабличный запрос NHibernate, возвращающий одну и ту же строку более одного раза - PullRequest
1 голос
/ 15 марта 2012

Следующий запрос nhibernate вызывает у меня проблемы, поскольку он возвращает одну и ту же строку более одного раза, поскольку дочерние таблицы имеют более одной строки, которые соответствуют предоставленным критериям.То, что я хотел бы знать, - это наиболее эффективная / лучшая практика в nhibernate для выполнения этого же запроса, но для получения каждой строки в DataMappingBase только один раз.Возвращение нескольких одинаковых строк нарушает количество возвращаемых результатов, поскольку я пытаюсь ограничить его 25, но иногда я получаю одну и ту же строку 25 раз.

MappedID id = null;
DataMappingBase mapBase = null;
NameDetails name = null;
dmbs = mappingSession.QueryOver<DataMappingBase>(() => mapBase)
   .JoinAlias(() => mapBase.IDs, () => id).WhereRestrictionOn(() => id.SecondaryDataIDType).IsNull()
   .JoinAlias(() => mapBase.Names, () => name).WhereRestrictionOn(() => name.Name).IsInsensitiveLike(request.Filter, MatchMode.Anywhere)
   .Take(request.MaxResults)
   .List();

В настоящее время я смотрю на преобразование запроса выше вотделенный запрос и удаление предложения «take» и получение его только для того, чтобы вернуть идентификатор соответствующих строк и использовать его в подзапросе, выбирая из «DataMappingBase», где идентификатор строки находится в идентификаторах, возвращенных подзапросом, ноя не уверен, что это лучший способ или нет.

1 Ответ

2 голосов
/ 15 марта 2012

Я не уверен, но вы можете сделать так:

MappedID id = null;
DataMappingBase mapBase = null;
NameDetails name = null;
dmbs = mappingSession.QueryOver<DataMappingBase>(() => mapBase)
   .JoinAlias(() => mapBase.IDs, () => id).WhereRestrictionOn(() => id.SecondaryDataIDType).IsNull()
   .JoinAlias(() => mapBase.Names, () => name).WhereRestrictionOn(() => name.Name).IsInsensitiveLike(request.Filter, MatchMode.Anywhere)
   .Take(request.MaxResults)
   // add this
   .TransformUsing(Transformers.DistinctRootEntity)
   .List();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...