When you use one-to-one mapping for object, that have with LINQ provider it's impossible to load property that contains associated object if it is not explicitly loaded in select clause.
Example:
<class name="ExternalField">
<composite-id>
<key-property name="Id" />
<key-property name="Id2" />
</composite-id>
</class>
<class name="Field">
<composite-id>
<key-property name="Id" />
<key-property name="Id2" />
</composite-id>
<one-to-one name="ExternalField" lazy="false" fetch="join" />
</class>
var fields = session.Query<Field>()
.ToList()
.Where(it => it.ExternalField != null).ToList();
There will be no object in final list, even if DB have such. Same queries work when using NHibernate.Linq.
If you take out the first ToList() on your LINQ query, the problem appears:
var fields = session.Query<Field>().Where(it => it.ExternalField != null).ToList();
select
field0_.Id as Id1_,
field0_.Id2 as Id2_1_
from
Field field0_
where
(
field0_.Id, field0_.Id2
) is not null
NHibernate is building a wrong SQL.
The problem in HQL
Moved here.