Nhibernate 多回迁

Nhibernate 多回迁,nhibernate,linq-to-nhibernate,Nhibernate,Linq To Nhibernate,我有一个与关联的实体,该实体有两个,我想立即获取它们。我可以通过以下查询实现这一点: var tshead = session.Query<MainEntity>() .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Other) .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Another) .Take

我有一个与
关联的实体,该实体有两个
,我想立即获取它们。我可以通过以下查询实现这一点:

 var tshead = session.Query<MainEntity>()
                .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Other)
                .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Another)
                .Take(10)
                .ToList();
var tshead=session.Query()
.Fetch(r=>r.FirstAssoc)。然后Fetch(p=>p.Other)
.Fetch(r=>r.FirstAssoc)。然后Fetch(p=>p.other)
.Take(10)
.ToList();
正如您所看到的,我必须编写两次
.Fetch(r=>r.FirstAssoc)
我相信我可以避免这种情况,但我不知道如何避免。有什么想法吗


谢谢

如果您选择一个特定的“MainEntity”,那么您可以使用以下类似的查询来完成:

 FirstAssoc firstAssoc = null;
 Other other = null;
 Another another = null;

 tshead = session.QueryOver<MainEntity>()
               .Where(x => x.Id == id)
               .JoinAlias(x => x.FirstAssoc, () => firstAssoc)
               .JoinAlias(() => firstAssoc.Other, () => other)
               .JoinAlias(() => firstAssoc.Another, () => another)
               .SingleOrDefault();
FirstAssoc FirstAssoc=null;
其他=空;
另一个=空;
tshead=session.QueryOver()
.其中(x=>x.Id==Id)
.JoinAlias(x=>x.FirstAssoc,()=>FirstAssoc)
.JoinAlias(()=>firstAssoc.Other,()=>Other)
.JoinAlias(()=>firstAssoc.other,()=>other)
.SingleOrDefault();
我在这里写过:

你不能这样做:

一个多个

只有一个多个


我不确定你能做很多很多,转换起来太难了。

我不认为你能避免它,除非
Fetch(r=>r.FirstAssoc.other)
有效,我对此表示怀疑。@Diego谢谢,你的怀疑得到了证实(表达式太复杂异常)。但是如果有,那就太好了。我有完全相同的问题,尽管我的FirstAssoc是一个集合,所以它是FetchMany.ThenFetch.FetchMany.ThenFetch。我很想找到解决方案。@Diego-CC您,因为您可能感兴趣。+1,但您使用的是QueryOver,我们可以用linqtonh实现同样的效果吗?PS你的博客真的很有趣:)@Felice-不确定你是否能用Query完成,我怀疑这是不可能的,但我会在这个周末玩一玩,看看我能走多远。你为什么不能使用QueryOver?谢谢你对我博客的评论:)谢谢。我最终可以求助于使用queryover,但我只是担心很多API合并在一起。如果你使用的是存储库模式,那么这些细节就会隐藏起来。我主要使用QueryOver,但有时会使用Query、HQL和本机SQL(如果需要)。