c# - Fluent NHibernate 加入不使用主键

标签 c# nhibernate fluent-nhibernate nhibernate-mapping

我正在尝试从连接表中获取单个属性,其中我的主表中的非主键连接到外部表的主键。以下是我试图完成的过度简化示例(我不想引用外国实体):

表格:

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");
});

最佳答案

据我所知,使用 Fluent 解决此问题的唯一方法是像您当前所做的那样映射到 View 。 Join() 将始终映射到父表的主键。 KeyColumn 方法仅指定子表的键列,在您的例子中是类别表。

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

关于c# - Fluent NHibernate 加入不使用主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3442611/

相关文章:

c# - 在 Canvas 中移动按钮

c# - 不能在另一个引用的项目中使用类

asp.net - 构建 nhibernate 的标准

c# - linq to nhibernate 在查询中重用业务逻辑

fluent-nhibernate - Fluent NHibernate — 使用 HiLo 生成器时指定表/列名称

c# - Azure Function App 如何与 Azure 资源交互?

c# - Windows Phone 8.1 日期选择器在点击时显示

NHibernate:根据列获取不同的结果,但检索所有列

c# - N休眠: QueryOver in generic method

c# - 使用引用继承属性的 lambda 在 Fluent NHibernate 映射中应用过滤器?