C# NHibernate,使用QueryOver w/Future获取孙辈收藏
我试图检索父实体的所有集合(非笛卡尔积),但不知道如何获取子实体。表结构如下所示: 下面的代码获取my parent及其Child1和Child2集合,以及其ParentChild3集合,但我不知道如何构造查询以获取Child3孙子(并将它们延迟到Future())C# NHibernate,使用QueryOver w/Future获取孙辈收藏,c#,nhibernate,C#,Nhibernate,我试图检索父实体的所有集合(非笛卡尔积),但不知道如何获取子实体。表结构如下所示: 下面的代码获取my parent及其Child1和Child2集合,以及其ParentChild3集合,但我不知道如何构造查询以获取Child3孙子(并将它们延迟到Future()) var parent=\u会话 .QueryOver() .其中(x=>x.Id==Id) .Future(); var children1=\u会话 .QueryOver() .其中(x=>x.Id==Id) .Fetch(x=
var parent=\u会话
.QueryOver()
.其中(x=>x.Id==Id)
.Future();
var children1=\u会话
.QueryOver()
.其中(x=>x.Id==Id)
.Fetch(x=>x.Children1)
.Future();
var children2=\u会话
.QueryOver()
.其中(x=>x.Id==Id)
.Fetch(x=>x.Children2)
.Future();
var parentChildren3=\u会话
.QueryOver()
.其中(x=>x.Id==Id)
.Fetch(x=>x.ParentChildren3)。渴望
.Future();
//现在,如何获得孩子3?
返回parent.SingleOrDefault();
半相关:这是获得所有收藏的最佳方式吗?使用通过联接获取结果的查询是否更好(并且可能)?如何获取子项3:
ParentChildren alias = null;
var parentChildren3 =_session
.QueryOver<Parent>()
.Where(x => x.Id == id)
.JoinAlias(x => x.ParentChildren3, () => alias)
.Fetch(() => alias.Children3).Eager
.Future<Parent>();
ParentChildren别名=null;
var parentChildren3=\u会话
.QueryOver()
.其中(x=>x.Id==Id)
.JoinAlias(x=>x.ParentChildren3,()=>alias)
.Fetch(()=>别名.Children3).急切
.Future();
半相关:这是我所知道的最好的方法
如果ParentChild表没有其他列,则可以将其映射为标准的manytomany。NHibernate将不需要链接表的实体,并且即时抓取将更容易。尝试以下方法:
var parentChildren3 =
_session
.QueryOver<Parent>()
.Fetch(x => x.ParentChildren3).Eager
.Fetch(x => x.ParentChildren3.First().Child3).Eager
.Where(x => x.Id == id)
.Future<Parent>();
var parentChildren3=
_会议
.QueryOver()
.Fetch(x=>x.ParentChildren3)。渴望
.Fetch(x=>x.ParentChildren3.First().Child3).Eager
.其中(x=>x.Id==Id)
.Future();
正如在本论坛帖子中所解释的:不幸的是,我必须将其映射为复合(虽然这一个没有有效负载列,但其他人有),因此我无法避开很多。
var parentChildren3 =
_session
.QueryOver<Parent>()
.Fetch(x => x.ParentChildren3).Eager
.Fetch(x => x.ParentChildren3.First().Child3).Eager
.Where(x => x.Id == id)
.Future<Parent>();