c#,用Nhibernate(QueryOver或Linq)急切加载集合集合返回“无法同时获取多个包”

时间:2016-09-08 14:42:48

标签: c# linq nhibernate collections queryover

我读了很多关于此的答案,但没有找到适用于我的具体案例的方法

我只有User对象具有ICollection<Group> Groups属性,并且每个组都有一个“ICollection Roles'proprty

现在我必须急切地加载一个特定用户,其中填充的组和每个组的角色填充到

我尝试(以及其他许多)这3种方式:

1:

 _session.Query<User>().FetchMany(u => u.Groups).ThenFetchMany(g => g.Roles)
    .SingleOrDefault();

2:

var utente = _session.QueryOver<User>()
.Fetch(x => x.Groups).Eager
.Fetch(x => x.Groups.First().Roles).Eager
.Where(x => x.IdUtente == idUtente)
.SingleOrDefault();

3:

 var query = _session.QueryOver<Utente>()
    .Where(u => u.IdUtente == idUtente)
    .Future();

Gruppo gruppi = null;
Ruolo ruolo = null;
_session.QueryOver<Utente>()
    .Left.JoinAlias(u => u.Gruppi, () => gruppi)
    .Left.JoinAlias(() => gruppi.Ruoli, () => ruolo)
    .Future();

return query.ToList().First();

但每次我得到:cannot simultaneously fetch multiple bags

1 个答案:

答案 0 :(得分:1)

我解决了它在nhibernate地图中的集合proeprty上设置.AsSet