我正在尝试获取实体的总评论但我收回的结果不正确。
我如何获得任务及其评论计数(急切加载)
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();
答案 0 :(得分: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根元素应该是唯一的。由于您的原始代码没有变换器,因此您的根元素是重复的。