cho*_*bo2 3 nhibernate fetch eager-loading queryover
我有这个
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
Run Code Online (Sandbox Code Playgroud)
因此任务可以有许多personalTaskReminders.我发现如果我设置2个personalTaskReminders(所以PersonalTaskReminders现在将从db的集合中有2行)
它返回两次相同的任务.
所以,如果我有50个personaltaskReminders用于该任务.我会得到50个相同任务的结果.我不明白为什么.
如果我删除了急切的加载.我按照预期从数据库中获取了一个任务.
xel*_*ion 17
很明显,因为急切获取导致与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>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5622 次 |
| 最近记录: |