Nhibernate将一个映射到零或一个 - 使用左连接

时间:2013-09-09 05:49:48

标签: nhibernate one-to-one

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

1 个答案:

答案 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);
      }
 )