【问题标题】:Fluent NHibernate join not using primary key流畅的 NHibernate 加入不使用主键
【发布时间】:2011-02-07 20:12:37
【问题描述】:

我正在尝试从连接表中获取单个属性,其中我的主表中的非 PK 连接到外部表的 PK。下面是一个过于简单的示例,说明我正在尝试完成的工作(我不想引用外国实体):

表格:

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

CREATE TABLE Category
(
  Id int,
  Name text
)

要生成的 SQL:

SELECT Id, Body, CategoryId, Category.Name AS CategoryName
FROM Status
LEFT JOIN Category ON Category.Id = Status.CategoryId

我正在尝试在 StatusMap 中像这样映射连接,但它似乎正在连接两个主键(其中 Status.Id = Category.Id):

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

【问题讨论】:

  • 我也不知道该怎么做。如果您正在寻找解决方法,则可以改为映射到视图,这是我通常为此类事情所做的。
  • 这就是我目前用作解决方法的方法,很高兴我不是唯一一个 :)

标签: c# nhibernate fluent-nhibernate nhibernate-mapping


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多