Я не удивлен, это не кажется тебе правильным, не так. На самом деле, это так неправильно, это больно! Но вместо того, чтобы просто причинять вам горе, я объясню все причины, по которым это неправильно @
Во-первых, ваша загрузка во ВСЕХ обращениях в память из базы данных, по сути, означает, что вы запрашиваете хранилище данных, чтобы получить целую загрузку ненужных вам данных, а затем передаете их по проводам. Это хорошо, если у вас есть несколько поездок, но это не будет масштабироваться вообще.
Далее вы повторяете каждую поездку и называете свойство "trip.People". Затем он снова попадет в базу данных и загрузит ВСЕ данные для людей в КАЖДОМ из этих рейсов. Опять же, это убьет вас, если у вас будет несколько поездок с несколькими посетителями. Теперь это предполагает, что у вас нет фильтров в ваших сопоставлениях, или вы специально попросили NHibernate не выполнять отложенную загрузку вашей коллекции People, но в любом случае это целая загрузка данных, которую вы не хотите.
Мой совет - взглянуть на документы NHibernate, касающиеся запросов к вашей объектной модели с использованием HQL или Linq-To-NHibernate, и вы получите запросы, которые выглядят примерно так:
HQL (МОЙ HQL Отстой, так что это может быть очень неправильно):
var hql = @ "от Trip as t
присоединиться к т. люди как р
с p.Account.Id =: accountId выберите t "
Edit:
На самом деле, мой мозг сейчас немного медленный, поскольку уже поздно, но я только что понял, что вы делаете что-то здесь немного назад. Что вы на самом деле делаете после того, как все поездки, которые совершил человек, так почему бы вашему объекту учетной записи не сопоставить коллекцию поездок? По сути, вы должны стремиться к чему-то вроде этого:
var trips = accountRepo.GetAccount (123) .Trips;
Edit:
Опять я устал, так что это может быть чепухой, но я думаю, что карта, которую вы ищете, будет выглядеть так:
<bag name="Trip" cascade="all" table="TripToAccount" lazy="true">
<key column="AccountId" />
<many-to-many class="Trip">
<column name="TripId" not-null="true"/>
</many-to-many>
</bag>
Редактировать:
Черт, я должен идти спать. Теперь я вижу, что у вас уже есть сопоставление между людьми и их поездками, так почему бы и нет:
var query = "из TripPeople as tp
Где tp.Account.Id =: accountId AND
tp.IsActive = true выберите tp.Trip "
Перестану отвечать сейчас, пока я не сделал более глупые вещи.