使用Criteria API,我们可以同时实现left
和/或inner
加入:
剩下
// default left outer join
var leftResult = session.CreateCriteria<Fruit>()
.SetFetchMode("Color", NHibernate.FetchMode.Join)
.List<Fruit>();
内
// explicit inner join
var innerResult = session.CreateCriteria<Fruit>()
.CreateCriteria("Color", NHibernate.SqlCommand.JoinType.InnerJoin)
.List<Fruit>();
leftResult将包含所有Fruits
,而innerResult将仅包含这些具有Color
编辑:映射内部应用的特定解决方案
好吧,默认的左连接无法更改:Nhibernate 中的 Inner 或 Right Outer Join 和 Many to Many 集合上的 Fluent Nhibernate。但是如何使用其他 NHibernate 功能:
假设我们的Fruit
, 只有在存在 时才有意义Color
。如果这是真的,并且如果没有选择颜色(将列设置为 NULL) ,我们将永远不需要这些表记录,ColorId
那么有一种方法可以调整映射:
// Mapping Fruit
Table("Fruits");
Where("colorId IS NOT NULL");
...
或在 XML
<class name="Fruit" table="Fruits" where="colorId IS NOT NULL" ... >
(见http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-class)
所以这个,不会改变 LEFT 到 INNER,但至少映射将允许只有五颜六色的水果......