NHibernate Join Fetch(добрый)
Учитывая Команду -> Атлетические отношения и опрос всех спортсменов. Что я неправильно понимаю fetch="Join"
? Должно ли это отображение вызывать загрузку команды через соединение? При переборе спортсменов лениво загружает команду.
public class AthleteMap : ClassMapping<Athlete>
{
public AthleteMap()
{
ManyToOne(a => a.Team, o =>
{
o.Fetch(FetchKind.Join);
o.Lazy(LazyRelation.NoLazy);
}
);
}
}
Который производит этот 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>
итерация:
var session = factory.OpenSession();
foreach (var athlete in session.Query<Athlete>())
Console.WriteLine("{0} {1}", athlete.FirstName, athlete.Team.Name);
1 ответ
Решение
NHibernate Linq Query не использует стратегию извлечения сопоставления. Вы должны получить () в вашем запросе linq, как это.
var session = factory.OpenSession();
foreach (var athlete in session.Query<Athlete>().Fetch(x => x.Team))
Console.WriteLine("{0} {1}", athlete.FirstName, athlete.Team.Name);
Стратегия выборки, определенная в документе сопоставления, влияет на:
- поиск через Get() или Load()
- поиск, который происходит неявно при навигации по ассоциации
- ICriteria запросы
- HQL-запросы, если используется выборочная выборка
источник: выбор производительности