NHibernate Join Fetch(Kind)

mxm*_*ile 6 nhibernate nhibernate-mapping

给予团队 - >运动员关系并询问所有运动员.我误解了fetch="Join"什么?这种映射是否应该通过连接加载团队?在迭代运动员时,它仍然懒得加载球队.

public class AthleteMap : ClassMapping<Athlete>
{
        public AthleteMap()
        {
            ManyToOne(a => a.Team, o =>
                                       {
                                           o.Fetch(FetchKind.Join);
                                           o.Lazy(LazyRelation.NoLazy);
                                       }
                );    
        }    
}
Run Code Online (Sandbox Code Playgroud)

哪个产生这个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>
Run Code Online (Sandbox Code Playgroud)

迭代:

var session = factory.OpenSession();

 foreach (var athlete in session.Query<Athlete>())
     Console.WriteLine("{0} {1}", athlete.FirstName, athlete.Team.Name); 
Run Code Online (Sandbox Code Playgroud)

Ger*_*ard 13

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); 
Run Code Online (Sandbox Code Playgroud)

映射文档中定义的获取策略会影响:

  • 通过Get()或Load()检索
  • 在导航关联时隐式发生的检索
  • ICriteria查询
  • HQL查询是否使用了subselect fetching

来源:性能提取