У меня проблема при попытке выполнить следующее с nHibernate:
- Стремительная загрузка.
- Используйте selects (вот моя проблема, я могу сделать это только с помощью объединений)
- Фильтрация детей.
Давайте рассмотрим пример, где у нас есть класс RichPerson
, который может иметь несколько классов: автомобили, дома, мотоциклы и компании. Все сопоставлены с различными сущностями с разными таблицами.
Если я попробую следующее:
session.CreateCriteria(typeof (RichPerson))
.Add(Expression.Eq("Id", someId))
.CreateCriteria("Cars")
.Add(Expression.Eq("Brand","Ferrari")
nHibernate создаст внутреннее соединение, чтобы получить автомобили. Если RichPerson некоторых автомобилей Ferrari, объединение отправит дублированные данные.
Даже с .SetFetchMode("Cars",FetchMode.Select)
nHibernate делает соединение.
Полагаю, объединение происходит потому, что я спрашиваю: богатого человека с идентификатором X и с автомобилями Ferrari Таким образом, соединение необходимо. Но я просто хочу предварительно загрузить (как-то) автомобили Ferrari. И используйте их как guy.Cars
.
Уф! Я не знаю, правильно ли я выразил себя. В любом случае, спасибо, что уделили мне время.