0

我正在尝试获取实体的总评论,但我得到的结果不正确。

我将如何获得任务及其评论计数(急切地加载)

        var tasks = _session.QueryOver<Task>(() => taskAlias)
                                 .Where(x => x.OrganizationID == null)
                                 .Fetch(x => x.AssignedUser).Eager
                                 .Fetch(x => x.Owner).Eager
                                 .Fetch(x => x.Comments).Eager
                                 .List();

这将返回:

Task.ID 1 评论 3 Task.ID 1 评论 3 Task.ID 1 评论 3

Task.ID 2 评论 2 Task.ID 2 评论 2

Task.ID 3 评论 1

我想:

Task.ID 1 评论 3

Task.ID 2 评论 2

Task.ID 3 评论 1

我流利的映射是:

HasMany(x => x.Comments).Table("tComments").ForeignKeyConstraintName("fT_Task_ID").KeyColumn("fC_Resource_ID").Where("fC_Type = 'Task'").ReadOnly();

4

1 回答 1

2

如果我正确理解您的问题,问题是您获取了正确的数据,它只是在根级别复制。如果是这种情况,请将您的查询更改为:

var tasks = _session.QueryOver<Task>(() => taskAlias)
                                 .Where(x => x.OrganizationID == null)
                                 .Fetch(x => x.AssignedUser).Eager
                                 .Fetch(x => x.Owner).Eager
                                 .Fetch(x => x.Comments).Eager
                                 .TransformUsing(new DistinctRootEntityResultTransformer())
                                 .List();

当您有一个实体并且它包含一个实体集合并且您告诉 NHibernate 急切地获取集合时,生成的 SQL 将基本上返回为:

TASK 1 - COMMENTS 1A
TASK 1 - COMMENTS 1B
TASK 1 - COMMENTS 1C
TASK 2 - COMMENTS 2A
TASK 2 - COMMENTS 2B
...

DistinctRootEntityResultTransformer 是我们用来告诉 NHibernate 根元素应该是唯一的。由于您的原始代码没有转换器,因此您的根元素是重复的。

于 2012-11-05T16:01:17.997 回答