我有这个
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
所以一个任务可以有很多个personalTaskReminders。我发现如果我设置了 2 个personalTaskReminders(所以 PersonalTaskReminders 现在将在它的 db 集合中有 2 行)
它两次返回相同的任务。
因此,如果我有 50 个针对该任务的个人任务提醒。我会得到 50 个相同任务的结果。我不明白为什么。
如果我删除急切加载。我按预期从数据库中取回了一项任务。
最佳答案
很明显,因为eager fetch 导致连接2 个表。要摆脱重复的结果,您应该使用 DistinctRootEntityTransformer。
顺便说一句,NHibernate 为 IN
提供了更好的语法。条款。所以你的查询应该是这样的:
var tasks = Session.QueryOver<Task>()
.WhereRestrictionOn(x => x.Id).IsIn(courseIds)
.Fetch(pt => pt.PersonalTaskReminders).Eager
.TransformUsing(Transformers.DistinctRootEntity)
.List<Task>();
关于nhibernate - 我在使用 Nhibernate Query Over fetch 时做错了什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6221362/