我上课Place
,可能有也可能没有User
。
// I have nothing on User related to Place
public PlaceMap()
{
Id( x=> x.Id, "id").GeneratedBy.Identity();
References(x => x.UserManager, "user_manager_id").Nullable().Cascade.All();
}
在查询Place
时,我希望始终保持加入,因为它是Nullable
。
问题是生成的sql有inner join
。
查询:
var queryList = _dalSession.CreateCriteria<T>();
queryList.CreateAlias("UserManager", "UserManager");
答案 0 :(得分:2)
您可以在调用CreateAlias
时显式设置连接类型:
using NHibernate.SqlCommand;
// ...
var queryList = _dalSession.CreateCriteria<T>();
queryList.CreateAlias("UserManager", "UserManager", JoinType.LeftOuterJoin);
如果您想将此行为设为默认行为,则可以通过映射完成此操作。
在按配置文件映射时,请指定`fetch =“join”
使用FluentNH,指定.Fetch.Join()
使用NHibernate按代码映射:
classMapper.ManyToOne(
x => x.UserManager,
manyToOneMapper =>
{
manyToOneMapper.Column("user_manager_id");
manyToOneMapper.NotNullable(false);
manyToOneMapper.Lazy(LazyRelation.NoLazy);
manyToOneMapper.Fetch(FetchKind.Join);
}
)