Я читал много постов по этому поводу, последний из которых - утверждение о поведении, которое я испытываю ожидаемым, если не предпочтительным способом.
У меня есть несколько моделей доменов, сопоставленных с ихТаблицы базы данных.
Я использую объект Criteria для их запроса.
var query = session.CreateCriteria(typeof(Posting))
.CreateAlias("Person", "person", JoinType.InnerJoin).SetFetchMode("Person", FetchMode.Eager)
.CreateAlias("Location", "location", JoinType.InnerJoin).SetFetchMode("Location", FetchMode.Eager)
.CreateAlias("Post", "post", JoinType.InnerJoin).SetFetchMode("Post", FetchMode.Eager)
.CreateAlias("post.Zone", "postzone", JoinType.LeftOuterJoin).SetFetchMode("post.Zone", FetchMode.Select)
Это дает точную оценку, которую я ищу.Я ожидал бы, что он будет заполнять объекты с нетерпением (что и происходит) и оставлять нулевые для post.Zone, где отношения не удаются.
В моем отображении я должен был сказать not-found = ignore (Notfound.Ignore () FNH), который из-за внешнего соединения заставляет NH генерировать несколько подзапросов - все к таблице зон - которые мне не кажутся необходимыми, тем более что у него уже есть данные, необходимые для заполненияОбъект зоны.
Может ли кто-нибудь рассказать о любых изменениях, которые я могу внести в отображение или запрос / критерии, чтобы сохранить эту нагрузку в одном запросе, или я должен ожидать дополнительный оператор для каждой внешней записи, к которой присоединен?
Спасибо, Сэм