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-запросы, если используется выборочная выборка

источник: выбор производительности

Другие вопросы по тегам