具有空多对一的 NHibernate 投影

NHibernate Projection With Null Many-To-One

criteria.CreateAlias("ChildObject", "c");
IProjection fullProjection = Projections.ProjectionList()
           .Add(Projections.Property("Item"), "Item")
           .Add(Projections.Property("c.SubItem"), "ChildObject.SubItem")

Object 具有属性 ItemChildObject

ChildObject 有一个 属性 SubItem.

NHibernate 可以使用此投影成功查询并列出所有带有 ChildObject 的对象。

但是,ChildObject 在某些行上可以为空。这个投影似乎完全跳过了它们。他们永远不会进入我的变形金刚。我认为 NHibernate 根据要求进行这些预测,以便在标准中不为空。

所以我虽然可以通过以下方式胜过它:

Projections.Conditional(Restrictions.Eq("ChildObject", null), nullProjection, fullProection)

nullProjection 根本没有投影 ChildObject,但它只是抱怨....

Both true and false projections must return the same types.

有没有办法做这个投影并获得可为空的值?还是我必须做两个单独的查询?

这与左联接而不是内联接有关。

criteria.CreateAlias("ChildObject", "c");

将创建 SQL 语句作为内连接,但使用....

criteria.CreateAlias("ChildObject", "c", LeftJoin);

强制执行左连接,并在值不存在时进行处理。