У меня есть сущность с несколькими отношениями «многие к одному», и я обнаружил, что могу охотно получить их в одном запросе, например:
public Accommodation GetEager(int id)
{
IList<Accommodation> query = NHibernateSession.CurrentFor(NHibernateSession.DefaultFactoryKey)
.CreateQuery(@"
select a from Accommodation as a
left join fetch a.AccommodationType
left join fetch a.AccommodationUnitType
left join fetch a.CollectionType
where a.Id = :id
")
.SetProperties(new {id})
.SetCacheable(true)
.List<Accommodation>();
return query.SingleOrDefault();
}
Однако отношения не всегда существуют, и я определил сопоставления следующим образом:
mapping.References(x => x.AccommodationUnitType).NotFound.Ignore();
Я обнаружил, что когда отношения не существуют, NHibernate сгенерировал второй SQL-запрос для его поиска, предположительно потому, что обнаружил, что свойство имеет значение null.
Мой первый вопрос: как я могу предотвратить этот второй SQL-запрос?
Мой второй вопрос: есть ли более простой способ сделать выборку в одном запросе? Кажется очень простым поведением, что каждый хотел бы получить все в одном запросе, а не в отдельном запросе для каждого отношения многие-к-одному (что кажется поведением по умолчанию).