我有这个
using (ITransaction transaction = session.BeginTransaction())
{
Task tAlias = null;
CompletedTask cAlias = null;
List<Task> tasks = session.QueryOver<Task>(() => tAlias)
.Where(Restrictions.In(Projections.Property(() => tAlias.Course.Id), courseIds))
.Fetch(pt => pt.PersonalTaskReminders).Eager
.List<Task>().ToList().ConvertToLocalTime(student);
transaction.Commit();
return tasks;
}
PersonalTaskReminders == Collection
所以一个任务可以有很多个人任务提醒。我发现如果我设置 2 个personalTaskReminders(这样 PersonalTaskReminders 现在将在数据库的集合中有 2 行)
它返回相同的任务两次。
因此,如果我有 50 个针对该任务的个人任务提醒。我会得到同一任务的 50 个结果。我不明白为什么。
如果我删除急切加载。我按照预期从数据库中获取了一项任务。
这是显而易见的,因为急切的获取会导致与 2 个表的连接。要消除重复的结果,您应该使用不同的根实体转换器。
顺便说一句,NHibernate 提供了更好的语法IN
条款。所以你的查询应该是这样的:
var tasks = Session.QueryOver<Task>()
.WhereRestrictionOn(x => x.Id).IsIn(courseIds)
.Fetch(pt => pt.PersonalTaskReminders).Eager
.TransformUsing(Transformers.DistinctRootEntity)
.List<Task>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)