I'm using NHibernate with fluent api and got MainEntity
mapping like this:
mapping.References(c => c.Parent1).Not.Nullable().Fetch.Select();
mapping.HasMany(c => c.Children1).Fetch.Select();
mapping.HasMany(c => c.Children2).Fetch.Select();
Then I'm trying to query MainEntity like this:
var query = Session.Query<MainEntity>().Where(e => e.ID == id);
query.Fetch(e => e.Parent1).ToFuture();
query.FetchMany(e => e.Children1).ToFuture();
query.FetchMany(e => e.Children2).ThenFetch(c => c.Children21).ToFuture();
var entity = query.ToFuture().FirstOrDefault();
And got sql query like this:
select * from MainEntity
left outer join Parent1 on MainEntity.Parent1ID = Parent1.ID
where MainEntity.ID = @id;
select * from MainEntity
left outer join Children1 on MainEntity.ID = Children1.MainEntityID
where MainEntity.ID = @id;
select * from MainEntity
left outer join Children2 on MainEntity.ID = Children2.MainEntityID
left outer join Children21 on Children2.Children21ID = Children21.ID
where MainEntity.ID = @id;
select * from MainEntity
where MainEntity.ID = @id;
But I want NHibernate to select MainEntity at first and then select Parent1
and Children1
, Children2
by condition:
select *
from Parent1
where ID = @parent1ID;
select *
from Children1
where MainEntityID = @id;
@parent1ID
and @id
are selected by first query of MainEntities.
Please, help me to configure mapping to do this.