首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate Join获取(Kind)

NHibernate Join获取(Kind)
EN

Stack Overflow用户
提问于 2011-11-23 03:13:10
回答 1查看 2.9K关注 0票数 6

给出了团队->运动员关系,并询问了所有运动员。我对fetch="Join"有什么误解?此映射是否应导致通过join加载团队?当迭代运动员时,它仍然懒惰地加载团队。

代码语言:javascript
复制
public class AthleteMap : ClassMapping<Athlete>
{
        public AthleteMap()
        {
            ManyToOne(a => a.Team, o =>
                                       {
                                           o.Fetch(FetchKind.Join);
                                           o.Lazy(LazyRelation.NoLazy);
                                       }
                );    
        }    
}

它产生了这个HBM:

代码语言:javascript
复制
<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>

迭代:

代码语言:javascript
复制
var session = factory.OpenSession();

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-23 05:36:30

NHibernate Linq查询不使用映射的fetch策略。您必须像这样在linq查询中获取()。

代码语言:javascript
复制
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()

  • retrieval进行的子选择检索在关联为navigated

  • ICriteria时隐式发生查询

  • HQL查询如果使用子选择抓取

来源:performance-fetching

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8232420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档