0

我的课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");
4

1 回答 1

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);
      }
 )
于 2013-09-09T06:21:24.897 回答