5

我正在尝试检索父实体的所有集合(非笛卡尔积),但无法弄清楚如何获得孙子。表结构如下:

在此处输入图像描述

以下代码获取我的父母及其 Child1 和 Child2 集合,以及它的 ParentChild3 集合,但我不知道如何构造查询以获取 Child3 孙子(并将它们推迟到 Future())。

var parent = _session
    .QueryOver<Parent>()
    .Where(x => x.Id == id)
    .Future<User>();

var children1 =_session
    .QueryOver<Parent>()
    .Where(x => x.Id == id)
    .Fetch(x => x.Children1).Eager
    .Future<Parent>();

var children2 =_session
    .QueryOver<Parent>()
    .Where(x => x.Id == id)
    .Fetch(x => x.Children2).Eager
    .Future<Parent>();

var parentChildren3 =_session
    .QueryOver<Parent>()
    .Where(x => x.Id == id)
    .Fetch(x => x.ParentChildren3).Eager
    .Future<Parent>();

// how to get children3, now?

return parent.SingleOrDefault();

半相关:这是获得所有收藏的最佳方式吗?使用通过连接获得结果的查询是否更好(并且可能)?

4

2 回答 2

3

如何获得Children3:

ParentChildren alias = null;
var parentChildren3 =_session
    .QueryOver<Parent>()
    .Where(x => x.Id == id)
    .JoinAlias(x => x.ParentChildren3, () => alias)
    .Fetch(() => alias.Children3).Eager
    .Future<Parent>();

半相关:这是我所知道的最好的方式。

如果 ParentChild 表没有其他列,那么您可以将其映射为标准多对多。NHibernate 将不需要链接表的实体,并且急切的获取会更容易。

于 2012-07-27T06:32:43.677 回答
2

尝试这个:

var parentChildren3 =
        _session
            .QueryOver<Parent>()
            .Fetch(x => x.ParentChildren3).Eager
            .Fetch(x => x.ParentChildren3.First().Child3).Eager
            .Where(x => x.Id == id)
            .Future<Parent>();

如本论坛主题所述:https ://groups.google.com/forum/?fromgroups=#!topic/nhusers/ER5BvVnCT5Q

于 2013-05-09T20:31:15.737 回答