流畅的NHibernate加入不使用主键

jwa*_*ech 7 c# nhibernate nhibernate-mapping fluent-nhibernate

我试图从连接表中获取单个属性,其中我的主表中的非PK连接到外表的PK.下面是我想要完成的一个过于简单的例子(我不想引用外国实体):

表:

CREATE TABLE Status
(
  Id int,
  Body text,
  CategoryId int
)

CREATE TABLE Category
(
  Id int,
  Name text
)
Run Code Online (Sandbox Code Playgroud)

SQL生成:

SELECT Id, Body, CategoryId, Category.Name AS CategoryName
FROM Status
LEFT JOIN Category ON Category.Id = Status.CategoryId
Run Code Online (Sandbox Code Playgroud)

我试图在StatusMap中映射这样的连接,但它似乎加入了两个主键(其中Status.Id = Category.Id):

Join("Category" m =>
{
  m.Optional();
  m.KeyColumn("CategoryId");
  m.Map(x => x.CategoryName, "Name");
});
Run Code Online (Sandbox Code Playgroud)

Mat*_*t B 4

据我所知,使用 Fluent 解决此问题的唯一方法是映射到您当前正在做的视图。Join()将始终映射到父表的主键。KeyColumn 方法仅指定子表的键列,在您的情况下,子表是类别表。

要使用上面的简化版本实现所需的 SQL,您可能需要使用它References来定义状态和类别之间的多对一关系。