Given a Team -> Athlete relationship and querying all athletes. What
am I misunderstanding about fetch="Join"? Should this mapping cause
the Team to be loaded via a join? When iterating the athletes, it
still lazy loads the Team.
public class AthleteMap : ClassMapping<Athlete>
{
public AthleteMap()
{
ManyToOne(a => a.Team, o =>
{
o.Fetch(FetchKind.Join);
o.Lazy(LazyRelation.NoLazy);
}
);
}
}
Which produces this HBM:
<class name="Athlete" table="Athletes">
<id name="Id" type="Int32" />
<property name="FirstName" />
<property name="LastName" />
<many-to-one name="Team" fetch="join" lazy="false" />
<property name="Created" />
</class>
iterating:
var session = factory.OpenSession();
foreach (var athlete in session.Query<Athlete>())
Console.WriteLine("{0} {1}", athlete.FirstName, athlete.Team.Name);
The NHibernate Linq Query doesn’t use the fetch strategy of the mapping. You have to Fetch() in your linq query like this.
The fetch strategy defined in the mapping document affects:
source:performance-fetching