有两个实体:
Employee -1..n- Order
提出了这个问题:
employee = Session.QueryOver<Employee>()
.Where(x => x.EmployeeId == 2)
.JoinQueryOver<mdl.Order>(x => x.Orders, JoinType.InnerJoin)
.Where(o => o.ShippedDate == null)
.SingleOrDefault();
填充整个ChildCollection - 无论过滤器。
当我使用LeftOuterJoin时,它正常工作:
employee = Session.QueryOver<Employee>()
.Where(x => x.EmployeeId == 2)
.JoinQueryOver<mdl.Order>(x => x.Orders, JoinType.LeftOuterJoin)
.Where(o => o.ShippedDate == null)
.SingleOrDefault();
修改
问题是,带有InnerJoin的QueryOver将加载所选Employee的所有订单(不正确,因为有一个Where-Clause with ShippedDate == null),QueryOver with Left Outer Join将只获取带有ShippedDate的订单== null(我认为这是正确的行为)。
有人可以解释一下,为什么InnerJoin没有按预期工作?这是NHibernate的设计吗?
感谢您提供的信息。