nHibernate Disjunction不是预期的行为

时间:2014-03-05 12:29:59

标签: c# hibernate nhibernate

我试图将两个Criterias分开,但结果不是预期的。 我试图获得一个人的所有书籍(在他的个人图书馆或他的团队的图书馆中)。

第一标准://返回1

myBooks = session.CreateCriteria<Book>()
                .CreateCriteria("Library")
                .CreateAlias("Users", "usr")
                .Add(Restrictions.Eq("usr.Id", myUserId))
                .List().Count;

第二标准//返回1

myTeamsBooks = session.CreateCriteria<Book>()
                .CreateCriteria("Library")
                .CreateAlias("Teams", "grp")         
                .Add(Restrictions.In("grp.Id", myTeamsIds))
                .List().Count;

Disjunction //预期2,返回0 !!

allMyBooks = session.CreateCriteria<Book>()
                .CreateCriteria("Library")
                .CreateAlias("Users", "usr")
                .CreateAlias("Teams", "grp")
                .Add(Restrictions.Disjunction()
                    .Add(Restrictions.Eq("usr.Id", myUserId))
                    .Add(Restrictions.In("grp.Id", myTeamsIds))
                )
                .List().Count;

在分离中我做错了什么? 我和.Add(Restrictions.Or(也尝试过相同的结果。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

此案例中的问题与 JOIN 类型有关。我们需要LEFT一个,但默认的(未指定)INNER。因此,请像这样调整CreatAlias,并返回正确的结果:

.CreateAlias("Users", "usr", JoinType.LeftOuterJoin)
.CreateAlias("Teams", "grp", JoinType.LeftOuterJoin)