NHibernate Join Fetch (добрый) - PullRequest
       1

NHibernate Join Fetch (добрый)

6 голосов
/ 22 ноября 2011

Учитывая Команду -> Атлетические отношения и опросить всех атлетов.Что я неправильно понимаю о 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 Ответ

13 голосов
/ 23 ноября 2011

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

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

...